我试图使用maven-processor-plugin生成JPA元模型Java文件,并按如下所示设置pom.xml。
<plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <compilerArgument>-proc:none</compilerArgument> </configuration> </plugin> <plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <executions> <execution> <id>process</id> <goals> <goal>process</goal> </goals> <phase>generate-sources</phase> <configuration> <!-- source output directory --> <outputDirectory>${basedir}/src/main/java</outputDirectory> <processors> <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> </processors> <overwrite>true</overwrite> </configuration> </execution> </executions> </plugin>
实际上,我想将元模型文件(Entity_.java)生成为其相应实体(Entity.java)的相同包。因此,我在插件中将outputDirectory设置为
<outputDirectory>${basedir}/src/main/java</outputDirectory>
第一次运行是可以的,但是从以后执行元模型Java文件重新生成时,该插件始终会发现有关文件复制的错误。
我的问题是-有什么方法可以配置插件,以便在重新生成过程中覆盖现有文件?
实际上,要变通
两者都很不方便,我希望你们能为我提供适当的解决方案。
正确的解决方案是,生成的源应该位于目标文件夹中,并且不应放入源文件夹或SCM系统中。
当然,通过将生成的源代码放置到目标中,您将在IDE中遇到问题,因为找不到相关的代码。因此,您可以添加build-helper-maven- plugin以从目标目录动态添加文件夹。
<plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <executions> <execution> <id>process</id> <goals> <goal>process</goal> </goals> <phase>generate-sources</phase> <configuration> <!-- source output directory --> <outputDirectory>${project.build.directory}/generated-sources/java/jpametamodel</outputDirectory> <processors> <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> </processors> <overwrite>true</overwrite> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>${project.build.directory}/generated-sources/java/jpametamodel</source> </sources> </configuration> </execution> </executions> </plugin>