让 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 来执行以下操作:
- 从 nexus
中拉取最新的 a.war、b.zip、c.tar.gz
- 将这些打包成app-assets.zip
- 部署应用-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 项目现在遵循以下过程:
- 从 nexus 中拉取最新的 a.war、b.zip 和 c.tar(放置在待打包目录中)。
使用 exec-maven-plugin 调用 bash 脚本。该脚本将:
我。将 a.war 文件复制到临时工作区目录,并在此处解压。
二。填充 temp-workspace/WEB-INF/classes/a-version.properties 中的变量。 (使用 sed)。
三。使用 jar 更新 war 文件中的文件。
打包应用-assets.zip
部署应用-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
让我的 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 来执行以下操作:
- 从 nexus 中拉取最新的 a.war、b.zip、c.tar.gz
- 将这些打包成app-assets.zip
- 部署应用-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 项目现在遵循以下过程:
- 从 nexus 中拉取最新的 a.war、b.zip 和 c.tar(放置在待打包目录中)。
使用 exec-maven-plugin 调用 bash 脚本。该脚本将:
我。将 a.war 文件复制到临时工作区目录,并在此处解压。
二。填充 temp-workspace/WEB-INF/classes/a-version.properties 中的变量。 (使用 sed)。
三。使用 jar 更新 war 文件中的文件。
打包应用-assets.zip
部署应用-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