美文网首页大数据平台技术笔记
3. maven+ant实现一键打包及svn提交

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

作者: OkGogogooo | 来源:发表于2022-04-26 16:36 被阅读0次

    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的插件和扩展插件

    相关文章

      网友评论

        本文标题:3. maven+ant实现一键打包及svn提交

        本文链接:https://www.haomeiwen.com/subject/svxhyrtx.html