簡體   English   中英

如何讓 Maven EAR 插件自動管理依賴的類路徑?

[英]How to make the Maven EAR Plugin automatically manage the classpath for dependencies?

大約 12 個月前,我開始使用 maven 耳塞插件,想知道是否有任何替代品。 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>

我是否遺漏了一些最新版本的插件是否消除了對此的需求,是否有替代方案可以為您管理這個? 我不敢相信每次向模塊添加依賴項時,我都需要將其添加到 ear pom 配置中。 最令人沮喪的是,即使我記得在上面的配置中添加了一個依賴庫,如果這又依賴於其他東西(就像軸的情況一樣),我只是在部署耳朵時才發現。

首先,您應該為 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 方庫。

除了 khmarbaise 的答案之外,我還想指出,為了讓您的 EJB 模塊能夠訪問庫,您必須將其配置為包含META-INF/MANIFEST.MF中的依賴項,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM