Maven - 如何处理生成的类

nih*_*t84 15 eclipse wsdl maven

我的困境是我对maven中生成的源文件有疑问.

我正在尝试从WSDL生成一些类,我真的不知道处理生成的源文件的标准方法是什么.

  • 我应该在哪里生成.java源文件?(src/main/java,src/main/generated)
  • 我应该将它们包含在源代码管理下,还是在签出后生成它们
  • 如果我不使用src/main/java文件夹,如何说服Eclipse自动"看到"那些类作为源文件夹?
  • 我真的需要.java文件,还是只需要.class-es?

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

谢谢你的回答,马克

Bri*_*ews 12

我遇到的大多数生成代码的Maven插件遵循将生成的Java源文件放在target/generated-sources文件夹的子目录中的约定.例如,Maven 2 JAXB 2.x插件target/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>
Run Code Online (Sandbox Code Playgroud)

请务必注意,某些Maven插件不会将生成的源附加到POM.您可以使用Build Helper Maven插件来实现此目的.


Jav*_*uez 5

我从未找到处理结果源文件的标准方法。但是,根据我的经验,我建议您执行以下操作:

  • 我应该在哪里生成.java源文件?(src / main / java,src / main / generated)
  • 我把它们放在src / main / com / mypackage / generate下。这样,它们已经在类路径中,并且您不需要任何其他手动配置即可无错误地编译Eclipse。
  • 我应该将它们包含在源代码管理下,还是让它们在签出后生成
  • 过去通常不包括它们,但是遇到一些问题(由于忘记了它们,缺少IDE Maven插件等导致开发人员无法生成它们)之后,我们最终将它们添加到了源代码管理中。这可以帮助任何人知道有一整套生成的源代码并没有神奇地出现,只需浏览文件夹即可快速检查架构更改(某些源文件已不存在,等等),并查看应用程序的真实大小
  • 如果我不使用src / main / java文件夹,如何使Eclipse自动说服这些类作为源文件夹?
  • 通过使用src / main / com / mypackage / generated解决。
  • 我真的需要.java文件还是仅需要.class-es?
  • 我建议使用.java文件。

在使用JAXB多年后,主要用于WSDL到Java的生成,仅花了我两分钱。