如何阻止Apache maven <outputdirectory>覆盖文件夹</outputdirectory>

时间:2011-10-24 20:57:14

标签: maven-2 maven-plugin maven-3

我有以下目录层次结构:

generated 

   |    
   | -->java

Java目录包含以下包: com.model

包含我在编译应用程序之前从某处复制/粘贴的java模型。

我使用协议缓冲区的问题,我告诉maven在同一个以前的目录BUT上输出生成的文件:

结果:协议缓冲区生成新包并删除旧包 我不知道为什么它会这样做虽然包名不同?

以下是用于从协议缓冲区生成java的pom的一部分:

        <plugin>
            <groupId>com.google.protobuf.tools</groupId>
            <artifactId>maven-protoc-plugin</artifactId>
            <configuration>
                <protocExecutable>C:\protoc.exe</protocExecutable>
                <protoSourceRoot>./src/proto</protoSourceRoot>
                <outputDirectory>./src/generated/java</outputDirectory>

            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

2 个答案:

答案 0 :(得分:3)

如果你看一下插件的代码,你会发现代码已被硬编码以清理目录:

https://github.com/dtrott/maven-protoc-plugin/blob/master/src/main/java/com/google/protobuf/maven/AbstractProtocMojo.java#L154

// Quick fix to fix issues with two mvn installs in a row (ie no clean)
cleanDirectory(outputDirectory);

有两种方法可以解决这个问题..将输出目录设置为临时目录,然后使用maven复制插件或maven构建插件将文件复制到您选择的目录中,或修改maven插件以删除该行(或更好,但可以配置)。

托米

答案 1 :(得分:1)

我已通过以下方式解决了我的问题:

<plugin>
              <artifactId>maven-antrun-plugin</artifactId>
              <executions>
                  <execution>
                      <phase>generate-resources</phase>
                      <goals>
                          <goal>run</goal>
                      </goals>
                      <configuration>
                          <tasks>
                              <delete dir="./destination"/>
                              <copy todir="./destination">
                                    <fileset dir="./source"/>
                              </copy>
                              <delete dir="./source"/>
                          </tasks>
                      </configuration>
                  </execution>
              </executions>
        </plugin>

但是,我收到此错误“出现了一个Ant BuildException:只能设置tofile和todir中的一个”