【问题标题】:maven-ear-plugin is not including jarModule into application.xmlmaven-ear-plugin 不包含 jarModule 到 application.xml
【发布时间】:2012-08-19 01:41:12
【问题描述】:

我一直在关注shows how to add third-party libraries to the generated application.xml 的 maven-ear-plugin 网站上的示例。但是,它似乎没有像我预期的那样工作。同样,Web 模块 contextRoot 被忽略。

根据documentation,我正在尝试做的事情应该是完全可能的。

Web 模块的上下文根可以使用 contextRoot 参数。

请注意,第三方库(即 JarModule)不是 包含在生成的 application.xml 中(只有 ejb-client 应该是 包含在 java 条目中)。但是,可以包含一个 jar 依赖项 在生成的 application.xml 中指定 includeInApplicationXml 标志

当它在我的 application.xml 中执行构建时,我有以下输出。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
    "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
    "http://java.sun.com/dtd/application_1_3.dtd">
<application>
  <display-name>MyApp.EAR</display-name>
  <module>
    <ejb>MyApp.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>MyApp.war</web-uri>
      <context-root>/MyApp.Web</context-root>
    </web>
  </module>
</application>

来自以下 maven 配置 (pom.xml)。

...
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah</groupId>
<artifactId>MyApp.EAR</artifactId>
<version>1.0</version>
<packaging>ear</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>maven-ear-plugin</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <applicationName>MyApp</applicationName>
                <modules>
                    <ejbModule>
                        <groupId>com.blah</groupId>
                        <artifactId>MyApp.EJB</artifactId>
                    </ejbModule>
                    <webModule>
                        <groupId>com.blah</groupId>
                        <artifactId>MyApp.Web</artifactId>
                        <contextRoot>MyApp</contextRoot>
                    </webModule>
                    <jarModule>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-simple</artifactId>
                        <includeLibInApplicationXml>true</includeLibInApplicationXml>
                    </jarModule>
                </modules>
                <archive>
                    <manifestEntries>
                        <WebLogic-Application-Version>${weblogic.version}</WebLogic-Application-Version>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <!-- web and ejb modules -->
    <dependency>
        <groupId>com.blah</groupId>
        <artifactId>MyApp.EJB</artifactId>
        <version>1.0</version>
        <type>ejb</type>
    </dependency>
    <dependency>
        <groupId>com.blah</groupId>
        <artifactId>MyApp.Web</artifactId>
        <version>1.0</version>
        <type>war</type>
    </dependency>
</dependencies>
...

很明显,application.xml 没有按我的预期生成。

  1. 在 application.xml 中提供的 contextRoot 不正确,而是输出默认名称 MyApp.Web 而不是指定的 MyApp。
  2. application.xml 中完全缺少指定的 org.slf4j jarModule。

我做错了什么?

从 Maven 调试如下所示。

[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal:          org.apache.maven.plugins:maven-ear-plugin:2.4.2:generate-application-xml (default-generate-application-xml)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <description>${project.description}</description>
  <displayName>${project.artifactId}</displayName>
  <encoding default-value="UTF-8"/>
  <generatedDescriptorLocation>${project.build.directory}</generatedDescriptorLocation>
  <includeLibInApplicationXml default-value="false"/>
  <project>${project}</project>
  <version default-value="1.3"/>
  <workDirectory>${project.build.directory}/${project.build.finalName}</workDirectory>
</configuration>

附:我尝试创建 maven-ear-plugin 标签,但它不会让我,因为我不够有名!如果有人能创造出来,我将不胜感激。

【问题讨论】:

  • 它似乎完全忽略了我的配置。任何想法为什么??

标签: jakarta-ee maven ear application.xml maven-ear-plugin


【解决方案1】:

非常感谢,几个小时以来一直在寻找解决此问题的方法。 :) 将广告我的 pom 以防万一这也可以帮助其他人。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>appletree.be-multi</artifactId>
        <groupId>be.appletree</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>appletree.be-ear</artifactId>
    <packaging>ear</packaging>

    <dependencies>


        <dependency>
            <groupId>be.appletree</groupId>
            <artifactId>appletree.be-domain</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>jar</type>
        </dependency>

        <dependency>
            <groupId>be.appletree</groupId>
            <artifactId>appletree.be-ejb</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>ejb</type>
        </dependency>

        <dependency>
            <groupId>be.appletree</groupId>
            <artifactId>appletree.be-web</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>war</type>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.8</version>
                <configuration>
                    <modules>
                        <jarModule>
                            <groupId>be.appletree</groupId>
                            <artifactId>appletree.be-domain</artifactId>
                            <includeInApplicationXml>true</includeInApplicationXml>
                        </jarModule>
                        <webModule>
                            <groupId>be.appletree</groupId>
                            <artifactId>appletree.be-web</artifactId>
                        </webModule>
                        <ejbModule>
                            <groupId>be.appletree</groupId>
                            <artifactId>appletree.be-ejb</artifactId>
                        </ejbModule>
                    </modules>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

【讨论】:

    【解决方案2】:

    按照惯例,我解决了,这是用户错误。

    奇怪的是,它几乎正确地生成了 EAR 文件,即使我的插件没有正确配置。

    我换了……

    <groupId>maven-ear-plugin</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    

    与...

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

    然后变了……

    <includeLibInApplicationXml>true</includeLibInApplicationXml>
    

    到...

    <includeInApplicationXml>true</includeInApplicationXml>
    

    然后突然间,它完成了我最初打算做的事情。

    我的最终 pom.xml 看起来像这样,因为我决定要自动包含所有 jar。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.blah</groupId>
        <artifactId>MyApp.EAR</artifactId>
        <version>1.0</version>
        <packaging>ear</packaging>
    
        <properties>
            <weblogic.version>10.3</weblogic.version>
            <weblogic.version.minor>${weblogic.version}.4</weblogic.version.minor>
            <weblogic.host>***</weblogic.host>
            <weblogic.port>***</weblogic.port>
            <weblogic.username>***</weblogic.username>
            <weblogic.password>***</weblogic.password>
        </properties>
    
        <build>
            <finalName>MyApp</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-ear-plugin</artifactId>
                    <version>2.7</version>
                    <configuration>
                        <applicationName>MyApp</applicationName>
              <includeLibInApplicationXml>true</includeLibInApplicationXml>
                        <modules>
                            <ejbModule>
                                <groupId>com.blah</groupId>
                                <artifactId>MyApp.EJB</artifactId>
                            </ejbModule>
                            <webModule>
                                <groupId>com.blah</groupId>
                                <artifactId>MyApp.Web</artifactId>
                                <contextRoot>MyApp</contextRoot>
                            </webModule>
                        </modules>
                        <archive>
                            <manifestEntries>
                                <WebLogic-Application-Version>${weblogic.version}</WebLogic-Application-Version>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>com.oracle.weblogic</groupId>
                    <artifactId>weblogic-maven-plugin</artifactId>
                    <version>10.3.4</version>
                    <configuration>
                        <adminurl>t3://${weblogic.host}:${weblogic.port}</adminurl>
                        <user>${weblogic.username}</user>
                        <password>${weblogic.password}</password>
                        <upload>true</upload>
                        <action>deploy</action>
                        <remote>false</remote>
                        <verbose>true</verbose>
                        <source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source>
                        <name>${project.build.finalName}</name>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>install</phase>
                            <goals>
                                <goal>deploy</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
            </plugins>
    
            <pluginManagement>
                <plugins>
                    <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
                    <plugin>
                        <groupId>org.eclipse.m2e</groupId>
                        <artifactId>lifecycle-mapping</artifactId>
                        <version>1.0.0</version>
                        <configuration>
                            <lifecycleMappingMetadata>
                                <pluginExecutions>
                                    <pluginExecution>
                                        <pluginExecutionFilter>
                                            <groupId>org.apache.maven.plugins</groupId>
                                            <artifactId>maven-ear-plugin</artifactId>
                                            <versionRange>[2.7,)</versionRange>
                                            <goals>
                                                <goal>generate-application-xml</goal>
                                            </goals>
                                        </pluginExecutionFilter>
                                        <action>
                                            <ignore></ignore>
                                        </action>
                                    </pluginExecution>
                                </pluginExecutions>
                            </lifecycleMappingMetadata>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    
        <dependencies>
        <dependency>
          <groupId>com.blah</groupId>
          <artifactId>MyApp.EJB</artifactId>
          <version>1.0</version>
          <type>ejb</type>
        </dependency>
        <dependency>
          <groupId>com.blah</groupId>
          <artifactId>MyApp.Web</artifactId>
          <version>1.0</version>
          <type>war</type>
        </dependency>
        </dependencies>
    </project>
    

    【讨论】:

    • 您的最后一个示例不再使用jarModule。你有问题吗?
    • @SérgioMichels 不,这与问题无关。
    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多