如何正确使用SNAPSHOTS依赖于EAR和EJB

4

我正在尝试在EAR中构建一个EJB。我的EJB依赖于SNAPSHOT。因此,当我构建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文件中列出的版本号与在构建ear时maven-ear-plugin指定的版本号不同。这个版本号是从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. 如何让maven-ear-plugin在没有-SNAPSHOT格式的情况下将jar包打入ear中?
  2. 如何让maven-ejb-plugin在MANIFEST.MF中使用-SNAPSHOT格式?
2个回答

11

我通过查阅Maven归档文档(Maven Archiver - Handling Snapshots)找到了解决问题的方法。

我只需要配置我的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>

下次我猜你需要仔细阅读文档了 :)


1
我曾经遇到过与 maven-jar-plugin 相似的问题,同样地, <useUniqueVersions>false</useUniqueVersions> 是解决方法,干杯。 - tomasz_kusmierczyk

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来解决这个时间戳问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接