我正在尝试在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 ,因为EJB类路径正在寻找一个不存在的jar文件。
基本上我需要知道:
答案 0 :(得分:10)
我通过查看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更接近我猜:)
答案 1 :(得分:0)
使用Maven版本3.6.2。
以下 maven-ear-plugin 的配置解决了我的问题。
<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
解决此时间戳问题。