gpt4 book ai didi

svn - Maven : Commit single artifact to svn repository

转载 作者:行者123 更新时间:2023-12-04 14:09:34 26 4
gpt4 key购买 nike

如何在部署生命周期阶段将单个工件(如文件或目录)提交到 svn 存储库中的任意位置? 对于存储库,我的意思是这里的普通 Subversion 存储库,而不是 Subversion 存储库中保存的 Maven 存储库!

我已经评估了 wagon-svn但它似乎只能用于将整个模块构建提交到 Subversion 存储库中保存的 Maven 存储库。

这是我的用例:我在构建期间生成了一个包含所有依赖项的 JAR 文件。这将在 Python 脚本中使用,因此在 Maven 世界之外。而且我想始终在包含 Python 框架的存储库中的相同位置提供当前版本的 JAR。

最佳答案

在你这样做之前,我会仔细考虑你这样做的原因。
派生的工件不应放入 SCM,因为它们很容易重建,相反,您可以考虑将工件附加到您的构建中,以便与它一起部署。
这可以通过 build-helper-maven-plugin 完成。下面的示例配置将附加 src/assembly/archive.xml 作为分类器“archive”的附加工件。

  <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 提供者和操作提供抽象层。下面的代码 can be added to a mojo .它期望提供两个参数,提交给 Subversion 的文件和 scm url。当绑定(bind)到您的项目时,它会将文件提交到 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-plugin 包装:
<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 plugin调用 ant subversion library

关于svn - Maven : Commit single artifact to svn repository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1130365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com