2011-10-14 68 views
14

我的两难处境是我对maven中生成的源文件有怀疑。Maven - 如何处理生成的类

我想从WSDL生成一些类,我真的不知道什么是处理生成的源文件的标准方式。

  • 我应该在哪里生成.java源文件? (SRC/main/java下,的src/main /生成)
  • 我应该将其源代码控制,或让他们退房后
  • 生成如果我不使用src /主/ java文件夹,如何自动说服Eclipse将这些类视为源文件夹?
  • 我真的需要.java文件,还是只需要.class-es?

有关此问题的最佳做法是什么?任何帮助或建议表示赞赏。

谢谢您的回答, 马克

回答

10

大多数Maven插件我遇到的是生成代码的遵循将生成的Java源文件在target/generated-sources文件夹中的子目录的约定。例如,Maven 2 JAXB 2.x Plugintarget/generated-sources/xjc文件夹中生成Java源文件。

只要构建是可重复的,我看不到需要将生成的源提交到我的源代码库。所以我通常会配置我的Git,Mercurial,SVN或者我用来忽略target下的所有内容。

我通常手动编辑.classpath文件以包括Eclipse源文件夹和我存储在源代码库的.classpath.project文件两者。

下面是一个例子:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/> 
    <classpathentry kind="src" path="target/generated-sources/xjc"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> 
    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> 
    <classpathentry kind="output" path="target/classes"/> 
</classpath> 

需要注意的是一些Maven插件不重视的产生源的POM是非常重要的。您可以使用Build Helper Maven Plugin来完成此操作。

3

我从来没有找到处理源文件的标准方法。然而,根据我的经验,我建议你如下:

  • 我应该在哪里产生的.java源文件? (SRC /主/ JAVA, 的src /主/生成)
  • 我把它们在src /主/ COM/mypackage的生成/。这样,它们已经在类路径中,并且不需要任何其他手动配置就可以使Eclipse无错地编译。
  • 我应该将其源代码控制,或让他们生成后退房
  • 习惯不包括他们,但在发生一些问题(开发人员因为他们忘记了,没有生成IDE Maven插件等)我们最终将它们添加到源代码管理。这帮助任何人知道,有一个生成的来源,不奇迹般的包,只通过探索一个文件夹(一些源文件不再存在,等等)快速检查模式的变化,并看到应用程序的实际大小
  • 如果我不使用src /主/ java文件夹,如何自动说服Eclipse来“看到”这些类的源文件夹?
  • 使用的src /主/ COM/mypackage的/生成的解决。
  • 我真的需要.java文件,或仅的.class-ES?
  • 我会建议使用.java文件。

我的两美分,使用JAXB多年后,主要用于WSDL到Java世代。

0

这是我多年来的建议:将所有代码生成放在一个单独的Maven项目中,并依赖于您需要生成代码的普通项目。

  • 做一个mvn install为您生成的代码,如果它是快照。
  • 除非你知道你正在做的,我不建议把生成的代码中的一个子模块是什么,否则,Eclipse会不断感到困惑,因为大多数人都导入所有的子模块(即多模块项目)
  • 但是如果你决定做多模块(即生成的代码是兄弟项目),您可以:
    • 特别是不将项目导入Eclipse和上的各个项目
    • 依靠M2E生命周期插件和建立帮助插件使用mvn install(这仅适用很好在某些代码生成上严重支持)。
  • 如果您需要调试生成的代码,我强烈建议使用maven-attach-sources插件将源代码附加到jar。

虽然多模块方法在实践中似乎是一个好主意,但它变得真的很烦人,因为如果有新的SNAPSHOT,每次拉时Eclipse都会不同步。

如果未生成生成的代码,往往然后就释放它,所以它不是一个快照(显然这需要一个适当的Maven仓库被设置)。