【问题标题】:How to stop Maven from overwriting if the destination exists如果目标存在,如何阻止 Maven 覆盖
【发布时间】:2012-12-13 19:15:54
【问题描述】:

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

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

我尝试了几种使用复制资源和依赖项的方法:解包,但如果来自依赖项的 mypath 更新/更新,即使我将所有可能的覆盖*配置设置为 false,maven 也会总是覆盖我知道。

任何建议或 RTFM + 指向我目前尚未阅读的手册的链接?

【问题讨论】:

  • 问题是你为什么需要这么奇怪的东西?
  • 原因在于项目的性质 :) 解释太长了

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


【解决方案1】:

你可以使用profiles:

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

【讨论】:

  • 谢谢,我试过了,但我定义了几个配置文件,每个配置文件都有正确的激活规则,当我尝试添加另一个具有相同激活规则(“缺失”)的配置文件时,其他配置文件不没有被激活。我了解 maven (2.2.1) 不允许我同时激活 2 个配置文件,是真的吗?
  • 所以对我来说你可以使用 maven-antrun-plugin。见How to execute tasks conditionally using the maven-antrun-plugin?
  • 听起来很有希望!明天早上我会试一试,我会带着我得到的结果回来:)
  • maven-antrun-plugin 成功了。如果 mypath 丢失,我用它设置一个属性,然后使用该属性设置 skip for dependency:unpack
  • 这是您永远不应拥有默认执行的配置文件的主要原因。它完全破坏了可扩展性,即添加具有配置文件的子模块将禁用项目的功能。配置文件只能作为最后的手段使用。您的构建应该在没有配置文件的情况下自行定义。如果您使用配置文件来创建不同类型的工件,我建议您改为创建子模块,在每次运行时创建它们,从而为您提供一致的输出。
【解决方案2】:

如@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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2021-07-11
    相关资源
    最近更新 更多