2014-01-24 42 views
3

我有一个Maven插件,它为我的java项目生成源代码,并将它们放置到'target/generated-sources'文件夹中。我在编译时需要这些源代码。我想在修改它的同时让它们在我的项目中生成。当然,我想将它们放到'src'文件夹下的正确文件夹中,而不是放入'目标/生成源'中。我如何使用Maven组织这个?如何在Maven中组织源代码?

换句话说,我希望能够:

  1. 生成来源,我需要运行我的特殊来源产生插件的一些目标(已经完成,来源有我指定的包)

  2. 将这些生成的源移动到'src/main/java/...'标准Maven布局的文件夹中。

  3. 从“目标/生成来源”文件夹删除它们,否则MVN清洁install命令引发错误,说我有“重复类”。事实上,如果我只是将生成的源代码从目标复制到src - 我必须使用相同的名称和包,但其中一个位于目标文件夹中。

哪个Maven插件可以用这个?我想这是一个典型的任务。

+0

看到你的pom.xml的相关配置会很有帮助。 – Behe

+0

这个插件是你开发的吗? – MariuszS

+1

这不是典型的,因为所有生成的东西都应该放到目标文件夹中。清理生成的文件很容易,也可以将签入的内容分离到源代码管理系统。 – Henry

回答

3

在行家的标准解决方案是从target/generated-sources生成所有源引入target/generated-sources,所有的源代码和从src被编译成target/classes并合并到目标罐子

插件不应该触摸src目录下的文件,因为这些文件是由版本控制系统(例如git)管理的。

如果插件写的不好,并从target/generated-sources源文件不会自动compilled到target,然后用目标build-helper:add-sourceBuild Helper Maven Plugin为@詹姆斯Kingsbery说。

maven-com4j-plugin源代码中有注释:

/** 
    * Directory in which to create the Java COM wrapper files. This directory 
    * will be added to the Maven project's compile source directory list and 
    * will therfore be auto-compiled when the Maven compile phase is run. 
    * 
    * @parameter expression="${outputDirectory}" 
    *   default-value="${project.build.directory}/generated-sources/com4j/java" 
    */ 

更重要组成部分,解决问题的方法是:

这个目录 将被添加到Maven项目的编译源代码目录列表和 将因此在Maven编译阶段运行时自动编译

所以,生成的源代码应该被自动编译并归档为jar

0

如果你的插件工作正常,它会将生成的源代码添加到内部项目和其他插件中,比如maven-compiler-plugin将它们接收并编译代码。

在你的插件代码,你可以通过使用类似的东西做到这一点:

mavenProject.addCompileSourceRoot(getOutputDirectory().getAbsolutePath());