问题 在Maven中构建EAR文件时出错


我正面临以下问题:

无法执行目标   org.apache.maven.plugins:Maven的耳插件:2.7:生成的应用程序的XML   项目UserAdminEAR上的(default-generate-application-xml):   工件[war:com.syril.administration:UserAdmin]不是依赖项   该项目。 - > [帮助1]

这种错误的解决方案是什么?

我的pom.xml是

<modelVersion>4.0.0</modelVersion>
<groupId>UserAdminEAR</groupId>
<artifactId>UserAdminEAR</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>UserAdmin</name>
<packaging>ear</packaging>
<dependencies>
    <dependency>
        <groupId>com.syril.dao</groupId>
        <artifactId>dataAccess</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.syril.service</groupId>
        <artifactId>UserAdminService</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
    </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <modules>
                    <jarModule></jarModule>
                    <javaModule>
                        <groupId>com.syril.dao</groupId>
                        <artifactId>dataAccess</artifactId>
                        <includeInApplicationXml>true</includeInApplicationXml>
                    </javaModule>
                    <webModule>
                        <groupId>com.syril.service</groupId>
                        <artifactId>UserAdminSL</artifactId>
                        <contextRoot>/UserAdminSL</contextRoot>
                    </webModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>


11615
2017-10-11 10:04


起源



答案:


您还必须将war作为依赖项添加到项目中,而不仅仅是在插件配置中。

<project ...>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.syril.administration</groupId>
    <artifactId>UserAdminEAR</artifactId> 
    <version>YOUR_VERSION_HERE</version>
    <packaging>ear</packaging>

    <dependencies>
        <!-- some other dependencies here -->
        ...
        <!-- Here is the dependency to the war that is referenced in the ear plugin -->
        <dependency> 
            <groupId>com.syril.administration</groupId> 
            <artifactId>UserAdmin</artifactId> 
            <version>YOUR_VERSION_HERE</version> 
            <type>war</type> 
        </dependency>
    </dependencies>
    ...
</project>

编辑

<webModule/> 神器不在你的身上 <dependencies/> 名单。这就是我的建议。

添加以下内容:

<dependency>
    <groupId>com.syril.service</groupId>
    <artifactId>UserAdminSL</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>war</type>
</dependency>

要么

改变 <webModule/>

<webModule>
    <groupId>com.syril.service</groupId>
    <artifactId>UserAdminService</artifactId>
    <contextRoot>/UserAdminSL</contextRoot>
</webModule>

那当然是 UserAdminService 是相同的 UserAdminSL 我认为。


15
2017-10-11 10:10



实际上jar和war应该在我的EAR文件中。但它不在那里 - syril
跑 mvn clean package 看看你是否还有这个问题。他们应该在那里。你也不必同时申报 <jarModule/> 也不是 <javaModule/> 标签。完全删除它们。 - maba
@maba为什么必须首先将工件描述为依赖项,然后再次需要 <webModule> 包装的片段?为什么要两次声明相同的信息?你能解释一下吗? - Geek
mvn clean为我工作。 - Jonathan Rosenne


答案:


您还必须将war作为依赖项添加到项目中,而不仅仅是在插件配置中。

<project ...>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.syril.administration</groupId>
    <artifactId>UserAdminEAR</artifactId> 
    <version>YOUR_VERSION_HERE</version>
    <packaging>ear</packaging>

    <dependencies>
        <!-- some other dependencies here -->
        ...
        <!-- Here is the dependency to the war that is referenced in the ear plugin -->
        <dependency> 
            <groupId>com.syril.administration</groupId> 
            <artifactId>UserAdmin</artifactId> 
            <version>YOUR_VERSION_HERE</version> 
            <type>war</type> 
        </dependency>
    </dependencies>
    ...
</project>

编辑

<webModule/> 神器不在你的身上 <dependencies/> 名单。这就是我的建议。

添加以下内容:

<dependency>
    <groupId>com.syril.service</groupId>
    <artifactId>UserAdminSL</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>war</type>
</dependency>

要么

改变 <webModule/>

<webModule>
    <groupId>com.syril.service</groupId>
    <artifactId>UserAdminService</artifactId>
    <contextRoot>/UserAdminSL</contextRoot>
</webModule>

那当然是 UserAdminService 是相同的 UserAdminSL 我认为。


15
2017-10-11 10:10



实际上jar和war应该在我的EAR文件中。但它不在那里 - syril
跑 mvn clean package 看看你是否还有这个问题。他们应该在那里。你也不必同时申报 <jarModule/> 也不是 <javaModule/> 标签。完全删除它们。 - maba
@maba为什么必须首先将工件描述为依赖项,然后再次需要 <webModule> 包装的片段?为什么要两次声明相同的信息?你能解释一下吗? - Geek
mvn clean为我工作。 - Jonathan Rosenne