我正在尝试在EAR中构建EJB。我的EJB依赖于SNAPSHOTS。因此,当我构建EAR时,我的结构如下所示:
my-ear-1.0.0-SNAPSHOT.ear
+ META-INF
- application.xml
- MANIFEST.MF
- my-ejb-1.0.0-SNAPSHOT.jar
- third-party-lib-1.0.0-SNAPSHOT.jar
但是,当使用maven-ejb-plugin生成其MANIFEST.MF时:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
[我的问题是MANIFEST.MF将SNAPSHOT列出为它在Nexus中的显示方式,而不是maven-ear-plugin在构建耳朵时如何命名它。
Manifest-Version: 1.0
Build-Jdk: 1.6.0_25
Class-Path: third-party-lib-1.0.0-20121026.140152-21.jar
所以我当然会得到ClassNotFoundException s,因为EJB的classpath正在寻找一个不存在的jar文件。
基本上我需要知道之一:
通过浏览Maven Archiver - Handling Snapshots处的maven存档器文档,找到了解决问题的方法。
我只需要配置我的maven-ejb-plugin,使其不使用“唯一版本”:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
下一次我猜RTFM接近:)
使用Maven版本3.6.2。
[<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<outputFileNameMapping>@{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@</outputFileNameMapping>
<generateApplicationXml>true</generateApplicationXml>
<version>7</version>
</configuration>
</plugin>
如果需要,您也可以更改outputFileNameMapping
的格式,但使用baseVersion
解决此时间戳问题。