大数据平台技术笔记

3. maven+ant实现一键打包及svn提交

2022-04-26  本文已影响0人  OkGogogooo

1. 目标

用maven打包jar,然后把jar拷贝到本地的产品目录,再用svn将jar提交到公司的SVN服务器。

2. 环境

eclipse 2021-12R
maven 3.8.5
ant 1.10.12
svn 1.14.0
操作系统 mac OS

3. 实现过程

关于如何在maven中调用ant脚本,已经在文章《2. maven调用ant脚本》中描述了。
下面描述如何在ant脚本中用svn提交。

3.1 svnant插件相关jar包

首先需要用到ant的svnant插件。在笔者在寻找打包好的svnant-1.3.1.jar时,因官网不可访问,maven上版本太旧(1.3)配置项和网上的配置资料有出入,其它地方各种会员限制或广告套路,选择自己从github上下载源码自己编译。GitHub上的svnant源码地址。它是一般的java工程,依赖的jar包在源码工程里都有,所有打包是一件“easy-->asy-->sy-->y”的事情。
使用的jar包主要有:

image.png
svnkit-*.jar需要升级一下,否则连接svn将报版本太低。另外的还需要引入一个lz4-java-1.8.0.jar,如果上图所示。将这些jar添加到ant的classpath中,此时ant脚本就能正常使用svn了。

3.2 ant脚本配置

ant脚本的关键配置在下面的配置文件中注明:

<?xml version="1.0" encoding="UTF-8"?>
<project name="export_jar" basedir="." default="pack">
     <!--必须定义这个标签-->  
    <taskdef resource="net/sf/antcontrib/antlib.xml" />
    <taskdef resource="org/tigris/subversion/svnant/svnantlib.xml" />
    <typedef resource="org/tigris/subversion/svnant/svnantlib.xml"/>
  
     ...省略
    <!-- 将svn的用户密码,在工程外面用个properties文件存储一下,不放在工程里面,避免提交源码时被提交上去,也方便多个工程共用 -->
    <property file="/Users/XXX/workspace/svn.properties" />

    <svnSetting id="svn.setting" username="${svn.username}" password="${svn.password}"/>
    
    ...省略
    <!-- 打包 -->
    <target name="pack" depends="checkEnv">
        ... 省略
        <for list="${groups}" delimiter="," param="group">
            <sequential>
                <var name="jarPublishDir" value="${productDir}/@{group}/${subDir}" />
                <var name="jarPath" value="${jarPublishDir}/${jarFileName}" />
                <!-- svn 更新 -->
                <if>
                    <and>
                        <isset property="svn.@{group}" />
                        <istrue value="${svn.@{group}}" />
                    </and>
                    <then>
                        <echo>SVN更新:${jarPath}</echo>
                        <svn refid="svn.setting">
                            <cleanup dir="${jarPublishDir}" />
                            <update file="${jarPath}" recurse="false" />
                        </svn>
                    </then>
                </if>
                <echo>将文件拷贝到正式发布位置:${jarPublishDir}</echo>
                <copy file="${tempOutJar}" todir="${jarPublishDir}" />
                <!-- svn 提交 -->
                <if>
                    <and>
                        <isset property="svn.@{group}" />
                        <istrue value="${svn.@{group}}" />
                    </and>
                    <then>
                        <echo>SVN提交jar:${jarPath}</echo>
                        <svn refid="svn.setting">
                            <commit file="${jarPath}" recurse="false" message="${svn.username}通过ant脚本提交" />
                        </svn>
                    </then>
                </if>
            </sequential>
        </for>
    </target>
</project>

3.3 maven配置

maven调用ant脚本时,ant脚本所使用到的扩展jar,需要在maven配置文件中dependency上。如下图:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...省略
  <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <testSourceDirectory>src/test/java</testSourceDirectory>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
            </testResource>
        </testResources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>pack-eclipse-plugin</id>
                        <phase>deploy</phase>
                        <configuration>
                            <target name="pack_eclipse_plugin">
                                <echo>开始调用Ant脚本...</echo>
                                <ant antfile="publish.ant" target="pack" />
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
                <!-- ant所需使用到的扩展jar包 -->    
                <dependencies>
                    <dependency>
                        <groupId>org.apache.ant</groupId>
                         <artifactId>ant</artifactId>
                        <version>1.10.12</version>
                    </dependency>
                    <dependency>
                        <groupId>ant-contrib</groupId>
                        <artifactId>ant-contrib</artifactId>
                        <version>1.0b3</version>
                    </dependency>
                    <dependency>
                        <groupId>XXXX</groupId>
                        <artifactId>svnant</artifactId>
                        <version>1.3.1</version>
                        <type>pom</type>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>

将打包好的svnant-1.3.1.jar和源码工程里的svnClientAdapter.jar上传到自己的maven仓库,然后编写一个pom工程,在其中引入svnant相关的依赖项,如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>XXX</groupId>
  <artifactId>svnant</artifactId>
  <version>1.3.1</version>
  <name>SVN ANT Plugin</name>
  <description>用于ANT的SVN插件</description>
  <packaging>pom</packaging>
  
  <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
  </properties>
  <dependencies>
    <dependency>
        <groupId>org.tigris</groupId>
        <artifactId>svnant</artifactId>
        <version>1.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.tigris</groupId>
        <artifactId>svnClientAdapter</artifactId>
        <version>1.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.tmatesoft.svnkit</groupId>
        <artifactId>svnkit</artifactId>
        <version>1.10.5</version>
    </dependency>
    <dependency>
        <groupId>org.tmatesoft.svnkit</groupId>
        <artifactId>svnkit-javahl16</artifactId>
        <version>1.8.1</version>
    </dependency>
  </dependencies>
  <distributionManagement>
        <repository>
                ...省略
        </repository>
        <snapshotRepository>
                ...省略
        </snapshotRepository>
   </distributionManagement>
</project>

4. 参考资料

ant的svn命令详解
ant的条件判断用法
ant的插件和扩展插件

上一篇下一篇

猜你喜欢

热点阅读