【问题标题】:How do I correctly use SNAPSHOTS dependencies with EARs and EJBs如何正确使用 EAR 和 EJB 的 SNAPSHOTS 依赖项
【发布时间】:2012-10-16 22:18:12
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    使用 Maven 版本 3.6.2。

    ma​​ven-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 来解决此时间戳问题。

    【讨论】:

      【解决方案2】:

      我通过查看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-jar-plugin 有类似的问题,同样&lt;useUniqueVersions&gt;false&lt;/useUniqueVersions&gt; 是解决方法,干杯。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      相关资源
      最近更新 更多