使用Maven自定义jboss-app.xml

时间:2011-02-17 20:29:19

标签: maven jboss maven-ear-plugin

我在jboss-app.xml中声明了自定义pom.xml,但该插件正在jboss-app.xml内生成一个内部空ear/META-INF文件。

我根据此article创建了我的pom.xml,其定义如下:

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <configuration>
        <data-sources>
            <data-source>${artifactId}/src/main/resources/mytest-ds.xml</data-source>
        </data-sources>
        <jboss>${artifactId}/src/main/resources/jboss-app.xml</jboss>
        <defaultLibBundleDir>lib</defaultLibBundleDir>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
        <modules>
            <ejbModule>
                <groupId>com.testproject</groupId>
                <artifactId>ejb-project</artifactId>
            </ejbModule>
        </modules>
    </configuration>
</plugin>

但是,我无法处理我的自定义jboss-app.xml。每次都会生成一个new是空描述符(没有定义的ejbs)。

3 个答案:

答案 0 :(得分:2)

您应该只需在源代码树中包含jboss-app.xml,Maven就会将其拉入。

maven-ear-plugin的项目目录结构如下所示:

|-- pom.xml
`-- src
    `-- main
        `-- application
            `-- META-INF
                |-- application.xml
                `-- jboss-app.xml

然后只需运行mvn package即可创建您的EAR。假设你的pom.xml的包装是'ear',它会将jboss-app.xml拉到你最后的耳朵里。

另外,我认为您的<datasources>...</datasources>配置需要在<jboss>...</jboss>标记内。

另请参阅:http://maven.40175.n5.nabble.com/Deployment-of-the-jboss-app-xml-file-td45009.html

答案 1 :(得分:1)

从文档中,jboss标记看起来会触发jboss-app.xml的生成。如何省略此标记并生成ear

答案 2 :(得分:0)

替代方案是按照here所述通过application.xml提取数据源。但由于<jarModule>需要的是完整的maven工件,这种方式更长(可能对于JBoss以外的应用程序服务器):

project/ds/pom.xml

<artifactId>project-ds</artifactId>
<packaging>jar</packaging>

<name>My DataSource</name>

project/ds/src/main/resources/my-ds.xml

<datasources>
    <local-tx-datasource>
    ...

project/ear/pom.xml(假设驱动程序也包装在EAR中):

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>project-ds</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>project-war</artifactId>
        <version>${project.version}</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.jtds</groupId>
        <artifactId>jtds</artifactId>
        <version>${jtds.driver.version}</version>
    </dependency>
</dependencies>
...
<plugin>
    <artifactId>maven-ear-plugin</artifactId>

    <configuration>
        <modules>
            <jarModule>
                <groupId>net.sourceforge.jtds</groupId>
                <artifactId>jtds</artifactId>
                <includeInApplicationXml>true</includeInApplicationXml>
            </jarModule>
            <jarModule>
                <groupId>${project.groupId}</groupId>
                <artifactId>project-ds</artifactId>
                <unpack>true</unpack>
                <uri>/</uri>
                <bundleFileName>my-ds.xml</bundleFileName>
                <includeInApplicationXml>true</includeInApplicationXml>
            </jarModule>
            <webModule>
                <groupId>${project.groupId}</groupId>
                <artifactId>project-war</artifactId>
                <contextRoot>${context.path}</contextRoot>
            </webModule>
        </modules>
    </configuration>
</plugin>

将生成META-INF/application.xml

<application>
  <display-name>project-ear</display-name>
  <description>...</description>
  <module>
    <java>jtds-1.2.4.jar</java>
  </module>
  <module>
    <java>my-ds.xml</java>
  </module>
  <module>
    <web>
      <web-uri>project-war-1.0.0.war</web-uri>
      <context-root>/</context-root>
    </web>
  </module>
</application>