Maven SVN checkout

5

有人能告诉我如何使用Maven从SVN进行检出和更新吗?我读了maven.apache.org上的文档,但似乎我太蠢了,因为我不知道如何在命令行中使用scm:checkout和scm:update而不传递参数。我的意思是当我只运行:

mvn scm:checkout (or scm:update) clean install 

Maven将源代码检出到/target/checkout,然后删除它,因此没有东西可编译,最终生成空的JAR包。因此,我需要编写类似以下代码的内容:
mvn scm:checkout -DconnectionUrl=scm:svn:http://svn.my.dev/scm/repo/trunk/myProject -DcheckoutDirectory=src clean install

但我不想这样做!如何在pom.xml中设置这些参数?如何将当前目录设置为checkoutDirectory?(如果在pom.xml中将其设置为${project.basedir},可能不会有问题,但谁知道呢)

我的pom.xml包括以下行:

...
  <scm>
    <connection>scm:svn:http://svn.my.dev/scm/repo/trunk/myProject</connection>
    <developerConnection>scm:svn:http://svn.my.dev/scm/repo/trunk/myProject</developerConnection>
  </scm>
...
  <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-plugin</artifactId>
        <version>1.7</version>
        <configuration>
      <username>username</username>
          <password>password</password>
        </configuration>
      </plugin>
...

顺便问一下,连接和开发者连接有什么区别。Maven文档只说了开发者连接是“开发者的SCM连接URL”。这对我来说非常惊讶,因为我认为这是某种适用于松鼠或兔子的连接。

1个回答

4

您可以直接将 checkoutDirectory 选项添加到 maven-scm-plugin 的配置中。一旦文件被检出,您就可以使用 workingDirectory 选项的 scm:update 命令(也可以在插件配置中进行配置)。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-scm-plugin</artifactId>
  <version>1.7</version>
  <configuration>
    <username>username</username>
    <password>password</password>
    <checkoutDirectory>${project.basedir}/src</checkoutDirectory>
    <workingDirectory>${project.basedir}/src</workingDirectory>
  </configuration>
</plugin>

是的,谢谢,那个方法可行。但我仍然无法将当前目录设置为checkoutDirectory。如果我设置<checkoutDirectory> $ {project.basedir} </ checkoutDirectory>(workingDirectory也一样),由于某种原因,Maven会清除整个目录,包括pom.xml,并退出,说它无法删除目录本身。当然这不是什么大问题,我可以使用提到的“src”子目录作为checkout和working目录,但对我来说最好使用当前目录进行此类操作。这可能吗? - mykola
不,我认为这是不可能的,因为Maven在进行检出之前总是会删除检出目录。 我不知道你的构建设置如何工作,但也许你可以将你的POM文件与src/目录一起提交(大多数人都这样做)。如果在你的环境中可以实现这一点,你可以运行mvn scm:checkout -DconnectionUrl=scm:svn:http://my-svn-url -DcheckoutDirectory="/my/checkout/directory"。你也可以把所有的-D选项放在一个“引导”POM中,然后只运行mvn scm:checkoutmvn scm:update - Stefan Ferstl
我写了一个shell脚本,用于检出/更新项目并运行maven构建。 毕竟,Maven SVN插件需要安装SVN,而SVN shell命令非常简单,所以我不认为使用Maven SVN插件有多大意义。 - mykola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接