Я создаю веб-приложение на джерси и использую встроенный tomcat для переносимости. Это довольно просто с одним ресурсом. Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю веб-приложение через IDE (intellij), все работает нормально, и я вижу, что мой класс, расширяющий ResourceConfig
, инициализируется. Он также отвечает на запрос HTTP. Он работает с IDE как с использованием Gradle, так и с внутренними инструментами сборки
Однако, как только я собираю его с помощью gradle через командную строку, используя плагин shadowJar, в tomcat ничего не загружается. Я вижу, что он ускоряется, но ни одна из строк журнала не появляется, и все мои HTTP-запросы приводят к 404. Я не уверен, как отладить это.
Мой основной класс
public class Main {
public static void main(String[] args) {
new Main().start();
}
public void start() {
String port = System.getProperty("port");
if (port == null) {
port = "8442";
}
Tomcat tomcat = new Tomcat();
tomcat.setPort(Integer.parseInt(port));
tomcat.getConnector();
String absolutePath = new File(".").getAbsolutePath();
Context context = tomcat.addWebapp("/webapp", absolutePath);
tomcat.start();
tomcat.getServer().await();
}
}
Мой MyApplication
класс
@ApplicationPath("app")
public class MyApplication extends ResourceConfig {
public MyApplication() {
setApplicationName("My web app");
LOG.info("Hello!")
packages("com.xxx.xxx.xxx.resources");
}
}
apply plugin: 'application'
apply plugin: 'com.github.johnrengelman.shadow'
buildscript {
dependencies {
classpath fileTree(dir: '../libs/shadow/', include: '*.jar')
}
}
mainClassName = 'com.xxx.xxx.xxx.Main'
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
dependencies {
implementation libraries.javax_servlet
implementation libraries.args4j
implementation libraries.log4j2
implementation libraries.common_loggings
implementation libraries.jersey
implementation libraries.tomcat
implementation project(":common")
}
jar {
manifest {
attributes('Main-Class': 'com.xxx.xxx.xxx.Main')
}
from {
configurations.runtimeClasspath.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}