如何在maven发布后自动更新application.xml中的版本

时间:2013-12-12 11:45:38

标签: java xml maven ear snapshot

application.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
  <description>DESCRIPTION</description>
  <display-name>xxxsystem-ear</display-name>
  <module>
    <ejb>xxxsystem-ejb-3.1.1-SNAPSHOT.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>xxxsystem-web-3.1.1-SNAPSHOT.war</web-uri>
      <context-root>/xxxsystem</context-root>
    </web>
  </module>
  <library-directory>lib</library-directory>
</application>

我跑完后: mvn发布:干净 mvn发布:准备 mvn release:执行

所以我必须手动将.jar和.war的版本更改为xml文件中的3.1.2。

有一种方法可以告诉maven为我更改此文件中的版本吗?

我必须使用jboss-deployment-structure.xml

执行相同的操作
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </deployment>

    <sub-deployment name="xxx-ejb-3.1.1-SNAPSHOT.jar">
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </sub-deployment>

    <sub-deployment name="xxx-web-3.1.1-SNAPSHOT.war">
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </sub-deployment>
</jboss-deployment-structure>

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

执行此操作的一个好方法是让maven负责生成application.xml文件:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <configuration>
                <filtering>true</filtering>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <modules>
                    <ejbModule>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>xxxsystem-ejb</artifactId>
                    </ejbModule>
                    <webModule>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>xxxsystem-web</artifactId>
                        <contextRoot>/xxxsystem</contextRoot>
                    </webModule>
                </modules>
            </configuration>
        </plugin>

其次,jboss-deployment-structure.xml(假设在src / main / application中)可以在插件中启用filtering生成(如上所示),并将其源代码修改为:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </deployment>

    <sub-deployment name="xxxsystem-ejb-${project.version}.jar">
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </sub-deployment>

    <sub-deployment name="xxxsystem-web-${project.version}.war">
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </sub-deployment>
</jboss-deployment-structure>

或者,您可以通过specifying the module filename生成无版本嵌入式模块的EAR:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <modules>
                    <ejbModule>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>xxxsystem-ejb</artifactId>
                        <bundleFileName>xxxsystem-ejb.jar</<bundleFileName>
                    </ejbModule>
                    <webModule>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>xxxsystem-web</artifactId>
                        <bundleFileName>xxxsystem-web.war</<bundleFileName>
                        <contextRoot>/xxxsystem</contextRoot>
                    </webModule>
                </modules>
            </configuration>
        </plugin>

在这种情况下,不需要过滤器复制jboss-deployment-structure.xml。每个子部署名称都与maven-ear-plugin配置中使用的bundleFileName匹配。

答案 1 :(得分:2)

为什么你不能使用简单的maven资源插件? http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

如果您正确配置文件您需要使用$ {project.version}及其完成