我建议使用公认的 CI tool 来管理此问题,因为 CI 不仅仅是构建。
但如果你决定自己动手,你可以使用 maven-scm-plugin 中的一些目标并捕获输出。
假设您有项目的本地副本,因此您可以访问 pom,您可以运行 status 命令来检查更改,并解析输出以检查任何更改
使用目标是:
mvn scm:status
如果您看到任何更改的文件,则可以检查更改并调用您的构建。
但请注意,maven-scm-provider-svnlink text 中有一个错误,这意味着可以跳过更改的文件!你最好直接调用 Subversion 并解析它的输出。
例如,以下将清除以前的构建,检查任何更改的内容,然后运行部署目标。
mvn clean scm:checkout deploy
如果您没有项目的工作副本,您可以使用scm:bootstrap 目标来获取它。如果你在 pom 中设置了一些属性,你可以重用 pom 来引导多个项目。
例如,如果您将适当的命令行参数传递给它,下面的 pom 可以引导任何项目:
mvn scm:bootstrap -DscmUserName=me -DscmPassword=mypass -DscmConnectionUrl=scm:svn:http://myserver/myproject/trunk
<project>
[...]
<packaging>jar</packaging>
<version>0.0.1</version>
<name>SCM bootstrapper</name>
<url>http://somecompany.com</url>
<scm>
<connection>${scmConnectionUrl}</connection>
<developerConnection>${scmDeveloperConnectionUrl}</developerConnection>
<url>${scmUrl}</url>
<scm>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.0</version>
<configuration>
<goals>install</goals>
<username>${scmUsername}</username>
<password>${scmPassword}</password>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
<properties>
<scmDeveloperConnectionUrl>dummy</scmDeveloperConnectionUrl>
<scmConnectionUrl>dummy</scmConnectionUrl>
<scmUrl>dummy</scmUrl>
<scmUsername>dummy</scmUsername>
<scmPassword>dummy</scmPassword>
</properties>
</project>
要使 Maven 与 subversion 一起工作,您需要配置 POM 的 scm 部分:
<scm>
<connection>scm:svn:http://path/to/project</connection>
<developerConnection>scm:svn:http://path/to/project/tags/version</developerConnection>
<url>scm:svn:http://path/to/project/tags/version</url>
</scm>
作为轮询更改的替代方法,请考虑添加hook to subversion,以便在进行更改时触发构建。 another question 可以为您提供指导。