Я хотел бы создать пакет WAR с помощью maven, который можно будет развернуть под Tomcat (9 или выше), а также запустить в командной строке (= CLI). Я уже понял, что нужно создать пакет, который можно было бы развернуть либо под Tomcat, либо выполнить в CLI, но не в одном и том же пакете.
В этой статье говорится:
Этот новый класс теперь можно использовать для запуска приложения с использованием встроенного
Jetty или Tomcat, внутри, и его можно развернуть в любом контейнере Servlet 3
.
Но у меня это не сработало (ни в Tomcat, ни в CLI).
РЕДАКТИРОВАТЬ: здесь я нашел опцию . При этом скомпилированный класс My.App был помещен в .JAR (в WEB-INF/lib, где расположены все остальные зависимости) вместо того, чтобы помещать его в WEB-INF/classes. Теперь .WAR можно развернуть под Tomcat, но я все еще не могу запустить его с помощью java -jar. Сообщение об ошибке: java.lang.ClassNotFoundException: My.App.
Есть ли решение извлечь каждый .JAR (под WEB-INF/lib) на диск, запустив java -jar, затем динамически установив путь к классам и, наконец, запустив My.App с диска? Или я на неправильном пути?
Нашел похожий вопрос. Но:
Таким образом, сборка проекта смогла создать несколько артефактов развертывания
Я хотел бы иметь 1 артефакт, который можно развернуть под Tomcat, а также можно выполнить с помощью java -jar.
У меня есть следующая структура проекта:
pom.xml
src/main/java/My/App.java
src/main/webapp/WEB-INF/config
src/main/webapp/WEB-INF/web.xml
src/main/webapp/doc
src/main/webapp/resources
src/test/java/My/AppTest.java
src/test/config
src/test/resources
В сгенерированном .WAR имеется следующая структура:
WEB-INF/classes/My/App.class
WEB-INF/config //configs of My.App
WEB-INF/lib //dependencies of My.App as .JAR
WEB-INF/web.xml //required by Tomcat
doc //some docs accessible within the running application
resources //resources of My.App
Это почти хорошо для развертывания под Tomcat; единственная проблема заключается в том, что My/App.class также должен находиться в файле .JAR в WEB-INF/lib.
Я также не могу запустить .WAR в CLI (с помощью java -jar), поскольку JVM не может найти зависимости My/App.class, даже если MANIFEST.MF имеет ClassPath с записями например:
WEB-INF/lib/dp1.jar
WEB-INF/lib/dp2.jar
Может ли кто-нибудь помочь мне в этом?
Содержимое App.java (на основе примера из статьи выше):
package My;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.Wrapper;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.core.StandardVirtualThreadExecutor;
import org.apache.catalina.startup.Tomcat;
import org.apache.commons.io.FileUtils;
import org.apache.tomcat.util.descriptor.web.ContextEnvironment;
import org.apache.tomcat.util.descriptor.web.FilterDef;
import org.apache.tomcat.util.descriptor.web.FilterMap;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import java.util.logging.Logger;
public class App extends SpringBootServletInitializer {
private static final Logger LOGGER = Logger.getLogger(App.class.getName());
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class);
}
public static void main(String[] args) throws LifecycleException, UnknownHostException {
Tomcat tomcat = createAndConfigureTomcat();
tomcat.start();
tomcat.getServer().await();
}
public static Tomcat createAndConfigureTomcat() throws UnknownHostException {
Tomcat tomcat = new Tomcat();
String docBase = new File(System.getProperty("java.io.tmpdir") + "/tomcat-" + Math.random()).getAbsolutePath();
tomcat.setBaseDir(docBase);
tomcat.getHost().setAppBase(docBase);
tomcat.enableNaming();
// ... etc
}
}
Содержимое pom.xml:
& l t ; m o d e l V e r s i o n & g t ; 4 . 0 . 0 & l t ; / m o d e l V e r s i o n & g t ; < b r / > & l t ; g r o u p I d & g t ; M y . a p p & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; M y . a p p & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; 0 . 1 & l t ; / v e r s i o n & g t ; < b r / > & l t ; p a c k a g i n g & g t ; w a r & l t ; / p a c k a g i n g & g t ; < b r / > < b r / > < b r / > & l t ; p r o p e r t i e s & g t ; < b r / > & l t ; m a v e n . c o m p i l e r . s o u r c e & g t ; 17
17
UTF-8
UTF-8
7.0.0-M7
2.4
9.0.104
3.13.0
3.4.0
3.4.2
0.8.12
org.springframework
spring-aop
${spring.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-expression
${spring.version}
org.springframework
spring-web
${spring.version}
org.yaml
snakeyaml
${snakeyaml.version}
org.apache.tomcat.embed
tomcat-embed-core
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-el
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-jasper
9.0.44
maven-compiler-plugin
${maven-compiler-plugin.version}
org.apache.maven.plugins
maven-jar-plugin
${maven-jar-plugin.version}
maven-war-plugin
${maven-war-plugin.version}
true
src/main/webapp/WEB-INF/web.xml
false
true
true
WEB-INF/lib/
${project.version}
${maven.build.timestamp}
WEB-INF/classes/
My.App
org.jacoco
jacoco-maven-plugin
${jacoco.version}
src/test/config
coverage
org.jacoco
jacoco-maven-plugin
prepare-agent
prepare-agent
report
report
Подробнее здесь: https://stackoverflow.com/questions/798 ... xecuted-in
Создание пакета WAR, который можно развернуть под Tomcat, а также запустить в CLI. ⇐ JAVA
Программисты JAVA общаются здесь
1763432107
Anonymous
Я хотел бы создать пакет WAR с помощью maven, который можно будет развернуть под Tomcat (9 или выше), а также запустить в командной строке (= CLI). Я уже понял, что нужно создать пакет, который можно было бы развернуть либо под Tomcat, либо выполнить в CLI, но не в одном и том же пакете.
В этой статье говорится:
Этот новый класс теперь можно использовать для запуска приложения с использованием встроенного
Jetty или Tomcat, внутри, и его можно развернуть в любом контейнере Servlet 3
.
Но у меня это не сработало (ни в Tomcat, ни в CLI).
РЕДАКТИРОВАТЬ: здесь я нашел опцию . При этом скомпилированный класс My.App был помещен в .JAR (в WEB-INF/lib, где расположены все остальные зависимости) вместо того, чтобы помещать его в WEB-INF/classes. Теперь .WAR можно развернуть под Tomcat, но я все еще не могу запустить его с помощью java -jar. Сообщение об ошибке: java.lang.ClassNotFoundException: My.App.
Есть ли решение извлечь каждый .JAR (под WEB-INF/lib) на диск, запустив java -jar, затем динамически установив путь к классам и, наконец, запустив My.App с диска? Или я на неправильном пути?
Нашел похожий вопрос. Но:
Таким образом, сборка проекта смогла создать несколько артефактов развертывания
Я хотел бы иметь 1 артефакт, который можно развернуть под Tomcat, а также можно выполнить с помощью java -jar.
У меня есть следующая структура проекта:
pom.xml
src/main/java/My/App.java
src/main/webapp/WEB-INF/config
src/main/webapp/WEB-INF/web.xml
src/main/webapp/doc
src/main/webapp/resources
src/test/java/My/AppTest.java
src/test/config
src/test/resources
В сгенерированном .WAR имеется следующая структура:
WEB-INF/classes/My/App.class
WEB-INF/config //configs of My.App
WEB-INF/lib //dependencies of My.App as .JAR
WEB-INF/web.xml //required by Tomcat
doc //some docs accessible within the running application
resources //resources of My.App
Это почти хорошо для развертывания под Tomcat; единственная проблема заключается в том, что My/App.class также должен находиться в файле .JAR в WEB-INF/lib.
Я также не могу запустить .WAR в CLI (с помощью java -jar), поскольку JVM не может найти зависимости My/App.class, даже если MANIFEST.MF имеет ClassPath с записями например:
WEB-INF/lib/dp1.jar
WEB-INF/lib/dp2.jar
Может ли кто-нибудь помочь мне в этом?
Содержимое App.java (на основе примера из статьи выше):
package My;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.Wrapper;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.core.StandardVirtualThreadExecutor;
import org.apache.catalina.startup.Tomcat;
import org.apache.commons.io.FileUtils;
import org.apache.tomcat.util.descriptor.web.ContextEnvironment;
import org.apache.tomcat.util.descriptor.web.FilterDef;
import org.apache.tomcat.util.descriptor.web.FilterMap;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import java.util.logging.Logger;
public class App extends SpringBootServletInitializer {
private static final Logger LOGGER = Logger.getLogger(App.class.getName());
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class);
}
public static void main(String[] args) throws LifecycleException, UnknownHostException {
Tomcat tomcat = createAndConfigureTomcat();
tomcat.start();
tomcat.getServer().await();
}
public static Tomcat createAndConfigureTomcat() throws UnknownHostException {
Tomcat tomcat = new Tomcat();
String docBase = new File(System.getProperty("java.io.tmpdir") + "/tomcat-" + Math.random()).getAbsolutePath();
tomcat.setBaseDir(docBase);
tomcat.getHost().setAppBase(docBase);
tomcat.enableNaming();
// ... etc
}
}
Содержимое pom.xml:
& l t ; m o d e l V e r s i o n & g t ; 4 . 0 . 0 & l t ; / m o d e l V e r s i o n & g t ; < b r / > & l t ; g r o u p I d & g t ; M y . a p p & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; M y . a p p & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; 0 . 1 & l t ; / v e r s i o n & g t ; < b r / > & l t ; p a c k a g i n g & g t ; w a r & l t ; / p a c k a g i n g & g t ; < b r / > < b r / > < b r / > & l t ; p r o p e r t i e s & g t ; < b r / > & l t ; m a v e n . c o m p i l e r . s o u r c e & g t ; 17
17
UTF-8
UTF-8
7.0.0-M7
2.4
9.0.104
3.13.0
3.4.0
3.4.2
0.8.12
org.springframework
spring-aop
${spring.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-expression
${spring.version}
org.springframework
spring-web
${spring.version}
org.yaml
snakeyaml
${snakeyaml.version}
org.apache.tomcat.embed
tomcat-embed-core
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-el
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-jasper
9.0.44
maven-compiler-plugin
${maven-compiler-plugin.version}
org.apache.maven.plugins
maven-jar-plugin
${maven-jar-plugin.version}
maven-war-plugin
${maven-war-plugin.version}
true
src/main/webapp/WEB-INF/web.xml
false
true
true
WEB-INF/lib/
${project.version}
${maven.build.timestamp}
WEB-INF/classes/
My.App
org.jacoco
jacoco-maven-plugin
${jacoco.version}
src/test/config
coverage
org.jacoco
jacoco-maven-plugin
prepare-agent
prepare-agent
report
report
Подробнее здесь: [url]https://stackoverflow.com/questions/79819231/building-a-war-package-that-can-be-deployed-under-tomcat-and-can-be-executed-in[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия