如何正确使用SNAPSHOTS与EAR和EJB的依赖关系

时间:2012-10-26 16:06:56

标签: java-ee maven ejb ear manifest.mf

我正在尝试在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文件。

基本上我需要知道:

  1. 如何在不使用-SNAPSHOT格式的情况下将maven-ear-plugin插入耳中?
  2. 如何让maven-ejb-plugin在MANIFEST.MF中使用-SNAPSHOT格式?

2 个答案:

答案 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解决此时间戳问题。