我的困境是我对maven中生成的源文件有疑问。
我正在尝试从WSDL生成一些类,我真的不知道处理生成的源文件的标准方法是什么。
有关此问题的最佳做法是什么?任何帮助或建议表示赞赏。
谢谢你的回答,马克
我遇到的大多数生成代码的Maven插件遵循将生成的Java源文件放在target/generated-sources
文件夹的子目录中的约定。例如,Maven 2 JAXB 2.x Plugin在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>
重要的是要注意一些Maven插件不会将生成的源附加到POM。你可以用Build Helper Maven Plugin来解决这个问题。
我从来没有找到一种标准的方法来处理生成的源文件。但是,根据我的经验,我会向您推荐以下内容:
- 我应该在哪里生成.java源文件? (src / main / java,src / main / generated)
- 我应该将它们包含在源代码管理下,还是在签出后生成它们
- 如果我不使用src / main / java文件夹,如何说服Eclipse自动“看到”那些类作为源文件夹?
- 我真的需要.java文件,还是只需要.class-es?
在使用JAXB多年后,仅仅是我的两分钱,主要用于WSDL到Java的生成。
这是我多年后的建议:将所有代码生成放在一个单独的maven项目中,并在需要生成代码的正常项目中依赖它。
mvn install
。mvn install
依赖于m2e生命周期插件和Build Helper插件(这仅适用于受到大力支持的某些代码生成)。虽然多模块方法在实践中似乎是一个好主意但它变得非常令人烦恼,因为如果有新的SNAPSHOT,每次拉动时Eclipse都会失去同步。
如果生成的代码没有生成,那么通常只是释放它,因此它不是SNAPSHOT(显然这需要设置正确的maven存储库)。