如果目标存在,如何阻止Maven覆盖

时间:2012-12-13 19:15:54

标签: maven maven-dependency-plugin maven-resources-plugin

我在依赖项中有一个目录,我想在初始化阶段在src / main / webapp / mypath中复制。 但是我希望它只被复制一次,这意味着:

  • 如果src / main / webapp / mypath不存在,则从依赖
  • 复制
  • 如果src / main / webapp / mypath存在,那么即使依赖项中的那个更新,也永远不要从依赖中复制。如果存在,请勿覆盖它。从不。

我尝试了一些带有复制资源和依赖的方法:unpack但maven将总是覆盖,如果来自依赖项的mypath更新/更新,即使我将每个可能的覆盖*配置设置为false我知道。

到目前为止我没有读过的手册的任何建议或RTFM +链接?

2 个答案:

答案 0 :(得分:0)

您可以使用profiles

<profiles>
  <profile>
    <activation>
      <file>
        <missing>src/main/webapp/mypath</missing>
      </file>
    </activation>
    ... copy ...
  </profile>
</profiles>

答案 1 :(得分:0)

如@William所述,您可以使用ant插件,将属性导出到maven上下文,如果“true”则跳过任务。

以下是代码:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.7</version>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <exportAntProperties>true</exportAntProperties>
                <target>
                    <available file="src/main/resources/my-data" type="dir"
                                                   property="dir-exits"/>
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-zip-dependencies</id>
            <goals>
                <goal>unpack</goal>
            </goals>
            <configuration>
                <skip>${dir-exists}</skip>
                <artifactItems>
                    <artifactItem>
                        <groupId>com.mygroup</groupId>
                        <artifactId>myartifactid</artifactId>
                        <includes>**/*.json</includes>                                                       <outputDirectory>src/main/resources/</outputDirectory>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>