Создание пакета WAR, который можно развернуть под Tomcat, а также запустить в CLI.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Создание пакета WAR, который можно развернуть под Tomcat, а также запустить в CLI.

Сообщение 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











Подробнее здесь: https://stackoverflow.com/questions/798 ... xecuted-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»