首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven:将单个工件提交到svn存储库

问Maven:将单个工件提交到svn存储库
EN

Stack Overflow用户
提问于 2009-07-15 09:31:05
回答 1查看 9.3K关注 0票数 4

如何在部署生命周期阶段将文件或目录等单个工件提交到svn存储库中的任意位置?我指的是存储库的,这里指的是纯Subversion存储库,而不是存放在Subversion存储库中的Maven存储库!

我已经对货车-svn进行了评估,但它似乎只用于将整个模块构建提交到Subversion存储库中的Maven存储库。

这是我的用例:我生成一个JAR文件,包括构建期间的所有依赖项。这将在Python脚本中使用,所以在Maven世界之外。我想提供当前的JAR版本,它总是位于存放Python框架的存储库中的同一个位置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-15 13:04:58

在你这样做之前,我会仔细考虑你这样做的理由。派生工件不应该被放入SCM中,因为它们可以很容易地重新构建,相反,您可以考虑将工件附加到您的构建中,以便将它部署在它旁边。

这可以通过构建助手-maven-插件来完成。下面的示例配置将将src/assembly/archive.xml附加为分类器“归档”的附加工件。

代码语言:javascript
复制
  <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>

通过在依赖声明中指定分类器和类型,可以直接引用此工件。例如:

代码语言:javascript
复制
<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提供者和操作提供一个抽象层。可以添加到mojo中。下面的代码。它需要提供两个参数,即提交给Subversion的文件和scm url。当绑定到您的项目时,它将将文件提交到Subversion存储库。

代码语言:javascript
复制
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包:

代码语言:javascript
复制
<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>

下面是一个示例配置,它将在包阶段签入文件。

代码语言:javascript
复制
<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插件调用蚂蚁颠覆库

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1130365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档