让Maven写入WAR包中的文件

时间:2018-01-26 17:45:14

标签: maven jenkins maven-resources-plugin

让我的maven package-deploy项目写入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. 部署app-assets.zip
  5. 我想让这个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
    

1 个答案:

答案 0 :(得分:0)

不确定这是否是执行此操作的最佳方式,但以下是我的方法:

我使用了exec-maven-plugin

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

  1. 从nexus(放入待打包目录)中提取最新的a.war,b.zip和c.tar。
  2. 使用exec-maven-plugin调用bash脚本。这个脚本将:

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

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

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

  3. 打包app-assets.zip

  4. 部署app-assets.zip

  5. 以下是我为打包作业添加到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