让 Maven 写入 WAR 包中的文件

Have Maven write to file in WAR package

让我的 Maven 包部署项目写入 WAR 文件内的属性文件的最佳方法是什么?

我目前有三个独立的 maven 项目,它们创建自己的包:

a.war, b.zip, c.tar.gz

在 WAR 文件 (a.war) 中,有一个包含以下内容的属性文件:

buildDate=2018-01-25 16:11:49 PST
aUiNumber=2.1.0-SNAPSHOT.5
buildNumber=2.1.0-SNAPSHOT.${deploy.number}

文件位于此处(在 WAR 文件内):

WEB-INF/classes/a-version.properties

在 Jenkins 服务器上,我有一份工作使用 maven 来执行以下操作:

  1. 从 nexus
  2. 中拉取最新的 a.war、b.zip、c.tar.gz
  3. 将这些打包成app-assets.zip
  4. 部署应用-assets.zip

我想让这个 Maven 作业使用 Jenkins 作业编号填充 a-version.properties 文件中的 ${deploy.number}。最好的方法是什么?有没有办法在不解压 WAR 文件的情况下做到这一点?

我尝试将 a.war/WEB-INF/classes 添加到 war 文件的 <directory> 部分。正如预期的那样,构建没有失败;但是,它也没有填充变量:

mvn -U -f ./PackageDeployPom.xml resources:resources -Ddeploy.number=${BUILD_NUMBER}
[INFO] skip non existing resourceDirectory /home/jenkins/app-assets/apache-tomcat-8.0.41/webapps/a.war/WEB-INF/classes

不确定这是否是最好的方法,但我是这样做的:

我用的是exec-maven-plugin.

maven 项目现在遵循以下过程:

  1. 从 nexus 中拉取最新的 a.war、b.zip 和 c.tar(放置在待打包目录中)。
  2. 使用 exec-maven-plugin 调用 bash 脚本。该脚本将:

    我。将 a.war 文件复制到临时工作区目录,并在此处解压。

    二。填充 temp-workspace/WEB-INF/classes/a-version.properties 中的变量。 (使用 sed)。

    三。使用 jar 更新 war 文件中的文件。

  3. 打包应用-assets.zip

  4. 部署应用-assets.zip

这是我为打包作业添加到 pom 文件中的内容:

            <plugin>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <groupId>org.codehaus.mojo</groupId>
                <executions>
                    <execution><!-- For Adding deploy Number -->
                        <id>Renaming build artifacts</id>
                        <phase>package</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <executable>bash</executable>
                            <commandlineArgs>scripts/BuildNumber.sh -b ${deploy.number}</commandlineArgs>
                        </configuration>
                  </execution>
                </executions>
            </plugin>

这是由 Maven 插件执行的 Bash 脚本的工作部分:

#Cleaning the TempWorkspace
TempWs=${Workspace}/a-war-temp;
if [[ ! -d ${TempWs} ]];then
    mkdir ${TempWs};
else
    rm -r ${TempWs}/;
    mkdir ${TempWs};
fi
#--- end cleaning temp workspace ---    

#Copying the war file to the temp workspace
cp ${Workspace}/app-assets/${ApacheTomcat}/webapps/a.war ${TempWs}/a-old.war;


#Unpacking the war file, using sed to make changes to variable(s)
cd ${TempWs}
    jar xvf aw-old.war;
    sed -i "s/${deploy.number}/${BuildNumber}/g" ${TempWs}/WEB-INF/classes/am-version.properties
cd ${Workspace};     #Going back to the Workspace
#--- end populating variable(s) ---


#Updating the war file with the new properties file
jar -uf ${Workspace}/aw-emr/${ApacheTomcat}/webapps/aw.war -C ${TempWs} WEB-INF/classes/am-version.properties  

Maven 运行 使用此命令:

mvn -U -B -Ddeploy.number=${BUILD_NUMBER} -f ./App-Asset-deploy.xml clean package