我有以下目录层次结构:
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>
答案 0 :(得分:3)
如果你看一下插件的代码,你会发现代码已被硬编码以清理目录:
// 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中的一个”