Maven:将单个工件提交到svn存储库
在部署生命周期阶段,如何将单个工件(如文件或目录)提交到svn存储库中的任意位置对于repository,我指的是一个普通的Subversion存储库,而不是Subversion存储库中的Maven存储库强> 我已经评估了,但它似乎可以用于将整个模块构建提交到Subversion存储库中的Maven存储库Maven:将单个工件提交到svn存储库,svn,maven-2,maven-scm,Svn,Maven 2,Maven Scm,在部署生命周期阶段,如何将单个工件(如文件或目录)提交到svn存储库中的任意位置对于repository,我指的是一个普通的Subversion存储库,而不是Subversion存储库中的Maven存储库 我已经评估了,但它似乎可以用于将整个模块构建提交到Subversion存储库中的Maven存储库 package name.seller.rich; import java.io.File; import org.apache.maven.plugin.AbstractMojo; impo
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);
}
}
}
这是我的用例:我在构建期间生成一个包含所有依赖项的JAR文件。这将在Python脚本中使用,因此在Maven世界之外。我想在Python框架的存储库中提供当前发布的JAR。
在你这样做之前,我会仔细考虑你这样做的原因。 派生的工件不应该放入SCM中,因为它们可以很容易地重建,相反,您可以考虑将工件附加到您的构建中,以便与它一起部署。
这可以通过buildhelpermaven插件完成。下面的示例配置将附加src/assembly/archive.xml作为带有分类器“archive”的附加工件 以下是插件的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>
4.0.0
org.apache.maven.plugins
调用这并不是我想要做的。你能回顾一下我编辑过的问题吗?我回答的第二部分描述了如何获取SVNScmProviderRepository。这样,您就可以在Subversion上调用任意命令。如果这不符合你的需要,我不清楚你的编辑是什么意思。你能详细说明一下吗?@Rich:这真的很有帮助,但我到目前为止还没能完成。问题描述如下:由于add()不断失败,我添加了一个provider.validatescurl()调用,该调用也失败了。以下哪项可能是造成这种情况的原因?1.我必须在svn中使用auth,所以我在主机名之前添加了username:passwort@。2.我必须使用https。因此URL类似于scm:svn:。这不对吗?那怎么做认证呢?有文档链接吗?scm项目1非常稀少。您的思路是正确的。这里有一些模式:根据您所说的,您需要类似于scm:svn:svn的东西+ssh://username:password@svn.somewhere.com/path@Rich:让它工作起来!我的URL是正确的,但svn.exe不在路径上。非常感谢你对魔咒的介绍。顺便说一句,validatescurl()仍然失败,但添加和签入仍然有效。现在我只想从settings.xml获取用户名和密码。你能告诉我这需要什么样的LIB吗?
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);
}
}
}
<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>