如何使Maven EAR插件自动管理依赖项的类路径?

时间:2011-08-16 08:09:22

标签: maven maven-plugin ear maven-ear-plugin

我在12个月前开始使用maven ear插件,想知道是否有其他选择。 Maven的一个好处是依赖管理,但你似乎几乎完全失去了耳塞。它将所有依赖的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>

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

2 个答案:

答案 0 :(得分:5)

首先,您应该为耳朵(当然还有耳朵)设置一个单独的模块,如下所示:

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>

您正在使用的配置适用于应打包的补充第三方库。

答案 1 :(得分:3)

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

<plugin>
    <artifactId>maven-ejb-plugin</artifactId>
    ...
    <configuration>
        ...
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
    </configuration>
    ...
</plugin>