3

我正在尝试在 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 格式?
4

2 回答 2

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 更近了:)

于 2012-10-26T16:53:27.433 回答
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解决此时间戳问题的格式。

于 2020-05-28T08:11:03.110 回答