我怎么能犯一个神器像在部署生命周期阶段SVN存储库中文件或目录的任意位置? 随着库我的意思是一个普通的Subversion版本库在这里,而不是在Subversion版本库举行了Maven仓库!
我已经评估了旅行车SVN ,但现在看来,这正好可以用来将整个模块构建承诺在Subversion版本库举行了Maven仓库。
这是我用例:我生成一个JAR文件,包括构建过程中所有的依赖关系。 这是在Python脚本中使用,所以外面的世界的Maven。 我想在仓库持有的Python框架相同的位置始终提供当前版本的JAR。
你这样做之前我会仔细考虑你这样做的原因。 派生文物不应该被投入SCM,因为他们可以很容易地重建,而不是你可以考虑所以它一起部署它神器连接到您的构建。
这可以通过建立辅助性Maven的插件来完成。 下面的例子中的配置将附加的src /组件/ archive.xml与分类器“归档”一个额外的伪影。
<plugin>
<inherited>true</inherited>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>attach-artifacts</id>
<phase>deploy</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>src/assembly/archive.xml</file>
<type>xml</type>
<classifier>archive</classifier>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
这神器可以直接通过指定的依赖性声明中的分类和类型引用。 例如:
<dependency>
<groupId>my.group.id</groupId>
<artifactId>artifact-id</artifactId>
<version>1.0.0</version>
<type>xml</type>
<classifier>archive</classifier>
</dependency>
如果您在做这种方式设置时, Maven的SCM API提供了常见的SCM提供商和运营一个抽象层。 下面的代码可以被添加到一个魔力 。 该公司预计将提供两个参数,将致力于颠覆该文件和SCM的URL。 当绑定到你的项目,将提交文件到Subversion库。
package name.seller.rich;
import java.io.File;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.command.add.AddScmResult;
import org.apache.maven.scm.manager.ScmManager;
import org.apache.maven.scm.provider.ScmProvider;
import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
import org.apache.maven.scm.repository.ScmRepository;
/**
* @goal checkin-file
*/
public class SVNCheckinMojo extends AbstractMojo {
/**
* @component
* @required
*/
private ScmManager manager;
/**
* @component
* @required
*/
private ScmProvider provider;
/**
* @parameter
* @required
*/
private String connectionUrl;
/**
* @parameter
* @required
*/
private File svnFile;
/**
* Obtain the SVN repository.
*/
public ScmRepository getRepository() throws MojoExecutionException {
try {
ScmRepository repository = manager.makeScmRepository(connectionUrl);
if (!(repository.getProviderRepository() instanceof SvnScmProviderRepository)) {
throw new MojoExecutionException(
"the scm provider is not an SVN provider");
}
return repository;
} catch (Exception e) {
throw new MojoExecutionException(
"Unable to obtain SCM repositorys", e);
}
}
public void execute() throws MojoExecutionException, MojoFailureException {
ScmRepository repository = getRepository();
File dir = svnFile.getParentFile();
File file = new File(svnFile.getName());
ScmFileSet fileSet = new ScmFileSet(dir, file);
try {
AddScmResult result = provider.add(repository, fileSet);
if (!result.isSuccess()) {
throw new MojoExecutionException("unable to add file \""
+ svnFile + "\" to SCM URL \"" + connectionUrl + "\"");
}
} catch (ScmException e) {
throw new MojoExecutionException(
"failed to commit file to repository", e);
}
}
}
下面是该插件为例POM,注意Maven的插件包装:
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-svn-hack-plugin</artifactId>
<packaging>maven-plugin</packaging>
<version>0.0.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-svnexe</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-manager-plexus</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.5.1</version>
</dependency>
</dependencies>
</project>
下面是一个例子配置将在在封装阶段检查文件。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-svn-hack-plugin</artifactId>
<version>0.0.1</version>
<configuration>
<connectionUrl>scm:svn:http://svn.apache.org/svn/root/module</connectionUrl>
<svnFile>${project.build.directory}/${artifactId}-${version}-test.txt</svnFile>
</configuration>
<executions>
<execution>
<id>checkin-file</id>
<phase>package</phase>
<goals>
<goal>checkin-file</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
或在必要时你可以使用antrun插件调用蚂蚁颠覆库