Я пытаюсь построить тощую войну для последующего включения в большой файл уха. Ушная сборка полностью отделена от моего проекта войны и ожидает, что я предоставлю тощую войну с правильным файлом манифеста, ухо обещает предоставить предоставленные банки в своей корневой папке /libs.
Проблема, с которой я столкнулся, заключается в том, чтобы заставить файл manifest.mf войны указать, что предоставленные банки находятся в папке уха / libs, а банки компиляции / времени выполнения находятся в войне. т. е. запись пути к классу manifest.mf должна выглядеть следующим образом:
Class-Path: libs/commons-lang.jar commons-codec.jar
commons-lang имеет ограниченную область действия и ожидается, что он будет находиться в каталоге ear libs.
commons-codec находится на этапе компиляции и, как ожидается, станет частью войны.
Я изучил maven-war-plugin, но не могу понять, как заставить его предоставлять classpathPrefix только для предоставленных зависимостей.
Предложения, пожалуйста?
Окончательное принятое решение (спасибо всем за советы и ссылки). Требуется, чтобы зависимости, предоставленные ухом, были ограничены предоставленными, и это, заметил взлом: fake-application.xml:
<plugin>
<!--required to fix the war's manifest and skinny the war-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<defaultLibBundleDir>lib/</defaultLibBundleDir>
<skinnyWars>true</skinnyWars>
<generateApplicationXml>true</generateApplicationXml>
<applicationXml>${project.basedir}/src/test/fake-ear/fake-application.xml</applicationXml>
</configuration>
<executions>
<execution>
<phase>verify</phase>
<goals><goal>ear</goal></goals>
</execution>
</executions>
</plugin>
Затем я развертываю эту новую тощую войну в репозиторий и делаю это с помощью плагина развертывания maven:
<plugin>
<!--used in release build to deploy skinny war to nexus-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<executions>
<execution>
<id>deploy-file</id>
<phase>install</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<!--location of the skinny war after maven-ear-plugin builds it-->
<file>${project.build.directory}/${project.artifactId}-${project.version}/${artifactid}-${project.parent.version}.war</file>
<repositoryId>releases</repositoryId>
<url>${distributionManagement.repository.url}</url>
<groupId>${project.parent.groupId}</groupId>
<artifactId>${artifactid}</artifactId>
<version>${project.parent.version}</version>
<packaging>war</packaging>
</configuration>
</execution>
</executions>
</plugin>
<addClasspath>true</addClasspath>
, чтобы ваша конфигурация<classpathPrefix>
работала, см. связанный вопрос. - person Tunaki   schedule 09.11.2016