Maven-dependency-plugin:忽略overWrite = false

时间:2016-09-02 12:41:23

标签: java maven maven-3 maven-dependency-plugin

我的问题是我想用maven从.jar文件中提取文件,但前提是输出目录中不存在这些文件。因此,如果我有一个文件/src/META-INF/beans.xml,那么我只想提取persistence.xml等等。

可悲的是,maven-plugin忽略了我尝试的<overWrite>false</overWrite>的所有组合。

问题:知道我做错了什么吗?有可能吗?

<build>
  ...
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <executions>
      <execution>
        <id>unpack</id>
        <phase>validate</phase>
        <goals>
          <goal>unpack</goal>
        </goals>
        <configuration>
          <artifactItems>
            <artifactItem>
              <groupId> ... </groupId>
              <artifactId> ... </artifactId>
              <version>${project.version}</version>
              <outputDirectory>${basedir}/src/META-INF</outputDirectory>
              <includes>beans.xml,persistence.xml</includes>
              <overWrite>false</overWrite>
            </artifactItem>
          </artifactItems>
          <overWriteIfNewer>false</overWriteIfNewer>
          <overWrite>false</overWrite>
          <overWriteSnapshots>false</overWriteSnapshots>
          <overWriteReleases>false</overWriteReleases>
        </configuration>
      </execution>
    </executions>
  </plugin>
  ...
</build>

1 个答案:

答案 0 :(得分:0)

插件的简单overWrite属性doesn't exist as a property,因此插件会忽略它。

此外,您正在写信给您的项目${basedir}/src/META-INF,这可能不是最佳选择,但在某些情况下仍然可能是合理的。

因此,您只想在项目的validate阶段编写一次,最有可能只在第一次构建期间编写:即,如果存在,请不要再次覆盖它。

对于这些要求,以下内容可能更适合:

  • 使用Maven profile
  • 对文件activation使用missing选项:即,如果文件不存在(第一次),则激活将执行插件配置的配置文件;当文件已经存在时,不要激活配置文件,没有任何操作显然不会覆盖任何内容

    <profiles>
      <profile>
        <id>unpack-files</id>
        <activation>
          <file>
            <missing>${basedir}/src/META-INF/beans.xml</missing>
          </file>
        </activation>
        <build>
           <plugins>
               <!-- move here the maven-dependency-plugin unpack execution -->
           </plugins>
        </build>
      </profile>
    </profiles>
    

因此你仍然可以完全控制这个逻辑:

  • 当文件不存在时,它将被激活,首次执行
  • 仍然可以通过idmvn clean install -Punpack-files
  • 按需激活它