3

大约 12 个月前,我开始使用 maven ear 插件,想知道是否有任何替代方案。Maven 的好处之一是依赖管理,但是使用 ear 插件似乎几乎完全失去了这一点。它将所有依赖的 jar 构建到耳朵中,但实际上不会在不添加以下配置的情况下将它们中的任何一个放在类路径中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <version>6</version>
        <modules>
            <ejbModule>
                <groupId>com.mycompany.app</groupId>
                <artifactId>MyApplication-ejb</artifactId>                          
            </ejbModule>

            <jarModule>
                <groupId>axis</groupId>
                <artifactId>axis</artifactId>
                <bundleDir>lib</bundleDir>
            </jarModule>
            <jarModule>
                <groupId>commons-discovery</groupId>
                <artifactId>commons-discovery</artifactId>
                <bundleDir>lib</bundleDir>
            </jarModule>
            <jarModule>
                <groupId>axis</groupId>
                <artifactId>axis-wsdl4j</artifactId>
                <bundleDir>lib</bundleDir>
            </jarModule>
        </modules>
    </configuration>
</plugin>

我是否遗漏了一些最新版本的插件是否消除了对此的需求,是否有替代方案可以为您管理这个?我不敢相信每次向模块添加依赖项时,我都需要将其添加到 ear pom 配置中。最令人沮丧的是,即使我记得在上面的配置中添加了一个依赖库,如果这又依赖于其他东西(就像轴的情况一样),我只是在部署耳朵时才发现。

4

2 回答 2

5

首先,您应该为 ear (当然还有 ear )提供一个单独的模块,如下所示:

root
  +-- client
  !     +--- pom.xml
  +-- service
  !     +--- pom.xml
  +-- ear
        +--- pom.xml

其次你应该更新ear插件的版本,因为当前版本是2.6。此外,将您的部分定义为依赖项

 <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-ear-plugin</artifactId>
        <version>2.5</version>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>webgui</artifactId>
      <version>${project.version}</version>
      <type>war</type>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>service</artifactId>
      <version>${project.version}</version>
      <type>ejb</type>
    </dependency>
  </dependencies>

您使用的配置旨在用于应打包的补充 3rd 方库。

于 2011-08-16T10:58:29.077 回答
3

除了 khmarbaise 的答案之外,我还想指出,为了让您的 EJB 模块能够访问库,您必须将其配置为包含如下所示的依赖项META-INF/MANIFEST.MF

<plugin>
    <artifactId>maven-ejb-plugin</artifactId>
    ...
    <configuration>
        ...
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
    </configuration>
    ...
</plugin>
于 2014-05-02T12:19:02.190 回答