我有一个基于Maven的项目,其中我尝试添加由“jaxb2-maven-plugin”Maven插件自动生成的一些JAXB类.但是,我的第一个剪辑让我处于循环依赖循环中:
>因为这些JAXB类尚未生成,所以引用它们的其他来源有编译错误.
>因为这些其他源有编译错误,所以这些JAXB类不会生成.
似乎有两个明显的可能性来解决这个问题:
注释掉破坏的引用,以便项目生成并自动生成JAXB类.然后将这些生成的源从/ target复制到/ src / main / java中,以便引用它们不会导致编译错误.
>创建一个完全独立的项目,只包含JAXB的东西.将其作为我的主要项目中的依赖项.
我在这里遗漏了什么吗?选项#1看起来很可笑,只不过是人们使用JAXB的方式.选项#2似乎更加理性,但仍然效率低下且繁琐.我真的需要花费一个完全独立的项目的开销才能使用JAXB?
在Maven插件生成它们的同一个项目中,开发人员是否使用更优雅的方法来引用JAXB生成的类?
更新:根据请求,这里是我的POM的相关部分:
<build> <plugins> <plugin> <!-- configure the compiler to compile to Java 1.6 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</artifactId> <version>1.4</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>xjc</goal> </goals> </execution> </executions> <configuration> <!-- The name of your generated source package --> <packageName>com.mypackage</packageName> </configuration> </plugin> </plugins> </build>
当我运行mvn clean包时,我看到我的JAXB源生成在/ target子目录下面.但是,这些生成的源不会自动添加到编译阶段的类路径中.
后解决方案更新:事实证明,我的编译问题与我在Eclipse中运行的事实有关,而且它的Maven集成与“jaxb2-maven-plugin”有一些问题.有关该问题及其解决方案的更多详细信息,请参阅this StackOverflow question.
解决方法
我建议您将jaxb生成的类(api)和您的BL类(实现)拆分为2个maven项目,每个项目具有单独的pom.xml,并且具有编译顺序的主根pom.xml.那样你就可以建立api.jar了,那么maven会把它安装在本地的repo里面,之后就可以用它作为你实现的依赖.所以它看起来像:
-API\ --pom.xml - for api,jaxb generation -IMPL\ --pom.xml - for impl,api dependency is here pom.xml - main pom.xml with references to the projects above