Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven依赖插件:overWrite=false忽略_Java_Maven_Maven 3_Maven Dependency Plugin - Fatal编程技术网

Java Maven依赖插件:overWrite=false忽略

Java Maven依赖插件:overWrite=false忽略,java,maven,maven-3,maven-dependency-plugin,Java,Maven,Maven 3,Maven Dependency Plugin,我的问题是,我想用maven从.jar文件中提取文件,但前提是这些文件在输出目录中不存在。因此,如果我有一个文件/src/META-INF/beans.xml,那么我只想提取persistence.xml,等等 不幸的是,maven插件irgnores使用了我尝试过的false的所有组合 问题:知道我做错了什么吗?可能吗 <build> ... <plugin> <groupId>org.apache.maven.plugins</gro

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

不幸的是,maven插件irgnores使用了我尝试过的
false
的所有组合

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

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

...
org.apache.maven.plugins
maven依赖插件
2.10
打开
验证
打开
... 
... 
${project.version}
${basedir}/src/META-INF
xml,persistence.xml
假的
假的
假的
假的
假的
...

插件的simple
overWrite
属性,因此它被插件忽略

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

因此,您只想在项目的
validate
阶段编写一次,而且很可能只在第一次构建期间编写一次:也就是说,如果存在,不要再次重写它

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

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

    <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>
    
    
    解包文件
    ${basedir}/src/META-INF/beans.xml
    
因此,您仍然可以完全控制此逻辑:

  • 第一次执行时,当文件不存在时,它将被激活
  • 它仍然可以通过其
    id
    mvn clean install-Punpack文件
    )按需激活

谢谢您的回答。它解决了我的问题。我正在开发一个代码生成器,如果文件不存在,它会将文件添加到/src/目录中(如果用户选择使用手写文件而不是生成的文件,则文件存在)。如果我采用你的方法,我必须为每个文件使用一个配置文件(因为一个文件可以存在,另一个文件不存在,我不想覆盖这两个文件,只需添加缺少的一个)。你知道解决这个问题的更优雅的方法吗?@user3637541你找到更好的方法了吗?这个问题在全球列表中仍然没有得到回答,总的来说,我很想知道你是否有更好的解决方案。我也同意你的解决方案。为什么你需要写到
src/META-INF
?为什么不使用
src/main/resources/META-INF
,让资源插件完成它的工作?这是做什么用的?我正在写一个代码生成器。生成器能够考虑手写代码(和配置)。我遇到的问题是,maven项目采用模型并从中生成代码,然后编译生成的代码(同时考虑手写代码)。生成的代码被放入
gen/
,手写代码应位于
src
中。如果没有提供任何配置文件,我希望使用默认配置文件。这就是为什么我只想在不存在的情况下提取它们。