Неправильная структура пакета исполняемого файла - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь развернуть исполняемый военный файл на веб-сервере (в данном случае, weblogic). Я также хочу добавить некоторые внешние зависимости (файлы JAR) в другую папку. Конечная цель состоит в том, чтобы развернуть тощий WAR в EAR

. Из документации мой плагин spring-boot-maven-выглядит так:

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <layout>ZIP</layout>
        </configuration>
    </plugin>
</plugins>

Без <layout>ZIP</layout> Я получаю правильныйструктура пакета и может запустить войну, используя java -jar Web-0.0.1-SNAPSHOT.war, и я могу развернуть в Weblogic

Проблема в том, что я не могу добавить внешние зависимости, используя этот метод. Для этого я надеялся использовать PropertiesLauncher , но когда я добавляю конфигурацию <layout>ZIP</layout>, структура моего архива меняется.

Это без ZIP

Web-0.0.1-SNAPSHOT.war
├───META-INF
│   └───maven
│       └───com.poc
│           └───Web
├───org
│   └───springframework
│       └───boot
│           └───loader
│               ├───archive
│               ├───data
│               ├───jar
│               └───util
└───WEB-INF
    ├───classes
    │   └───com
    │       └───poc
    │           └───config
    │           └───controller
    ├───lib
    └───lib-provided

Manifestфайл выглядит так:

Manifest-Version: 1.0
Implementation-Title: Web
Implementation-Version: 0.0.1-SNAPSHOT
Start-Class: com.poc.WebApplication
Spring-Boot-Classes: WEB-INF/classes/
Spring-Boot-Lib: WEB-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.2.0.RELEASE
Created-By: Maven Archiver 3.4.0
Implementation-Vendor: None
Main-Class: org.springframework.boot.loader.WarLauncher


Это с опцией ZIP:

Web-0.0.1-SNAPSHOT.war
├───BOOT-INF
│   ├───classes
│   │   └───WEB-INF
│   │       ├───classes
│   │       │   └───com
│   │       │       └───poc
│   │       │           └───config
│   │       │           └───controller
│   │       └───lib
│   └───lib
├───META-INF
│   └───maven
│       └───com.poc
│           └───Web
└───org
    └───springframework
        └───boot
            └───loader
                ├───archive
                ├───data
                ├───jar
                └───util

Файл манифеста теперь выглядит так:

Manifest-Version: 1.0
Implementation-Title: Web
Implementation-Version: 0.0.1-SNAPSHOT
Start-Class: WEB-INF.classes.com.poc.WebApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.2.0.RELEASE
Created-By: Maven Archiver 3.4.0
Implementation-Vendor: None
Main-Class: org.springframework.boot.loader.PropertiesLauncher

Когда я пытаюсь запустить WAR сейчас, я получаю сообщение об ошибке:

Exception in thread "main" java.lang.NoClassDefFoundError: WEB-INF/classes/com/poc/WebApplication (wrong name: com/poc/WebApplication)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
    at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:597)

Я безуспешно пробовал следующее:

java -Dloader.path=WEB-INF/lib-provided,WEB-INF/lib,WEB-INF/classes -jar Web-0.0.1-SNAPSHOT.war
java -Dloader.path=BOOT-INF/lib,BOOT-INF/classes,WEB-INF/lib-provided,WEB-INF/lib,WEB-INF/classes -jar Web-0.0.1-SNAPSHOT.war
java -Dloader.path=BOOT-INF/lib/**,BOOT-INF/classes/**,WEB-INF/lib-provided,WEB-INF/lib,WEB-INF/classes -jar Web-0.0.1-SNAPSHOT.war

Я также пытался указать основной класс, новсе еще получаю NoClassDefFoundError:

java -Dloader.path=BOOT-INF/lib/**,BOOT-INF/classes/**,WEB-INF/lib-provided,WEB-INF/lib,WEB-INF/classes -Dloader.main=BOOT-INF.classes.WEB-INF.classes.com.poc.WebApplication -jar Web-0.0.1-SNAPSHOT.war

Я также пытался указать путь к классу, используя java -cp, но все равно не повезло ...


Это ошибка в плагине? Моя структура каталогов выглядит иначе, чем указанная в документации для исполняемого файла войны

Возможно ли даже использовать PropertiesLauncher с WAR?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...