maven scm插件在每次执行时删除输出文件夹

时间:2010-05-06 08:04:46

标签: svn version-control maven-2 svn-checkout maven-scm

我需要从2个不同的svn位置下载到同一个输出目录。所以我配置了2个不同的执行。但每次执行checkout都会删除输出目录,因此它也会删除已经下载的项目。

以下是我的pom.xml示例:

<profile>
  <id>checkout</id>
  <activation>
    <property>
      <name>checkout</name>
      <value>true</value>
    </property>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-plugin</artifactId>
        <version>1.3</version>
        <configuration>
          <username>${svn.username}</username>
          <password>${svn.pass}</password>
          <checkoutDirectory>${path}</checkoutDirectory>
          <skipCheckoutIfExists/>
        </configuration>
        <executions>
          <execution>
            <id>checkout_a</id>
            <configuration>
              <connectionUrl>scm:svn:https://host_n/folder</connectionUrl>
              <checkoutDirectory>${path}</checkoutDirectory>
            </configuration>
            <phase>process-resources</phase>
            <goals>
              <goal>checkout</goal>
            </goals>
          </execution>
          <execution>
            <id>checkout_b</id>
            <configuration>
              <connectionUrl>scm:svn:https://host_l/anotherfolder</connectionUrl>
              <checkoutDirectory>${path}</checkoutDirectory>
            </configuration>
            <phase>process-resources</phase>
            <goals>
              <goal>checkout</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</profile>

有没有办法阻止执行删除文件夹$ {path}?


我想出了一个解决方案,但我无法让它发挥作用:

我在配置文件中添加了maven-clean-plugin的执行:

<profile>
  <id>checkout</id>
  ...
  <plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <executions>
      <execution>
        <id>not-clean</id>
        <configuration>
          <filesets>
            <fileset>
              <directory>${path}</directory>
              <excludes>
                <exclude>*/*</exclude>
              </excludes>
              <followSymlinks>false</followSymlinks>
            </fileset>
          </filesets>
        </configuration>
        <phase>initialize</phase>
        <goals>
          <goal>clean</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

但我无法实现如何排除文件夹中的所有内容。

任何想法?

2 个答案:

答案 0 :(得分:3)

是:将每个SVN位置放在Maven模块(子项目)中,然后创建第三个项目,其中包含连接这两个的代码。

背景:使用Maven,每个POM.xml总是有一个项目。如果您认为需要从多个位置连接数据,请创建模块,然后使用父POM将它们连接到一个“reactor项目”。

要构建,请在父“reactor project”中调用Maven。

答案 1 :(得分:0)

我已经修改了maven-scm-plugin的源代码。添加了我需要的功能。

感谢您的时间和帮助!