1

这是在包装 EAR 时发生的

我的 pom.xml 正在打包 ear 文件,它应该在 /lib 文件夹之外包含 projectA.jar 文件和 projectB.war 文件。显然,projectA.jar 文件位于不应该的 /lib 文件夹中。我有我的 application.xml,它告诉这两个项目应该在 lib 之外。

问题:我如何指示 maven 不要将 projectA.jar 捆绑在 /lib 文件夹中,而是将其捆绑在 /lib 文件夹之外?

我的 EAR 结构应该是:

MyWebEAR

\lib
\META-INF
projectA.jar
ProjectB.war

下面是我的pom。

<dependencies>
    <dependency>
        <groupId>com.xxx.sms</groupId> 
        <artifactId>projectA</artifactId> 
        <version>1.0-SNAPSHOT</version>             
    </dependency>
    <dependency>
        <groupId>com.xxx</groupId>
        <artifactId>projectB</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>war</type>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <configuration>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <earSourceDirectory>${basedir}</earSourceDirectory>
                <earSourceIncludes>META-INF/*</earSourceIncludes>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
                <generateApplicationXml>false</generateApplicationXml>
                <applicationXML>${basedir}/META-INF/application.xml</applicationXML>
            </configuration>
        </plugin>
    </plugins>
    <finalName>MyWebEAR</finalName>
</build>

谢谢你的时间。

4

2 回答 2

5

您需要在maven-ear-plugin 部分中为 projectA 依赖项专门定义一个jarModule配置,并明确设置您希望放置 jar 的位置。modulesconfiguration

所以你的 POM 将是:

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <configuration>
        <defaultLibBundleDir>lib</defaultLibBundleDir>
        <earSourceDirectory>${basedir}</earSourceDirectory>
        <earSourceIncludes>META-INF/*</earSourceIncludes>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
        <generateApplicationXml>false</generateApplicationXml>
        <applicationXML>${basedir}/META-INF/application.xml</applicationXML>
        <modules>
            <jarModule>
                <groupId>com.xxx.sms</groupId>
                <artifactId>projectA</artifactId>
                <bundleDir>/</bundleDir>
            </jarModule>
        </modules>
    </configuration>
</plugin>

中的值 ( /)bundleDir告诉 maven-ear-plugin 将 projectA 的 jar 放在 ear 的根文件夹中,而不是 lib 的默认位置。

您可以在此处的插件文档中查看有关此内容的详细信息: http ://maven.apache.org/plugins/maven-ear-plugin/examples/customizing-module-location.html

于 2013-10-24T06:51:00.413 回答
0

我在我的项目中遇到了同样的问题。

In my case, I was using an MDB so it was needed to be declared as  <**ejbModule**> instead of jarModule. I also had to declare my dependency as of type ejb to be picked up Jboss (6.4):

<dependency>
    <groupId>ab.cd</groupId>
    <artifactId>mdb-publisher</artifactId>
    <version>xxx-SNAPSHOT</version>
   <type>**ejb**</type>
</dependency>
于 2017-02-20T22:31:57.757 回答