Указанный основной набор ресурсов недопустим при запуске JAR со встроенным Tomcat из командной строки - PullRequest
0 голосов
/ 30 января 2020

Я хотел запустить приложение как JAR со встроенным Tomcat, но проблема, с которой я столкнулся, заключается в следующем:

У меня есть следующая начальная точка входа для приложения:

public static void main(String[] args) throws Exception {
        String webappDirLocation = "src/main/webapp/";
        Tomcat tomcat = new Tomcat();

        Integer webPort = 8081;
        tomcat.setPort(webPort);
        tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());


        tomcat.start();
        tomcat.getServer().await();
}

Как только я запускаю приложение из IDE, приложение запускается успешно. Однако основная проблема заключается в том, что если я сгенерирую JAR-файл и захочу запустить его через командную строку с java -jar myJar.jar, я получу ошибку The main resource set specified [] is not valid. И путь внутри [] действительно неверен. По какой-то причине он получает путь к текущему JAR, который я хочу использовать, и добавляю к нему webappDirLocation path.

Есть ли способ сделать JAR со встроенным Tomcat способным запускаться из командной строки?

Я использую следующие плагины Maven для генерации исполняемого JAR:

<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>my.package.Main</mainClass>
        </manifest>
    </archive>
</configuration>
</plugin>

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>my.package.Main</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>
...