我使用Elipse Indigo,maven 2.2.1,m2e 1.0.2,maven integration for wtp 0.15.2,m2e connector for JiBX 1.2.3。
我有一个包含jibx绑定的共享maven jar工件。 .project文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>my-binding</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.jibx.eclipse.JibxBindingBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.jibx.eclipse.JibxNature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
</natures>
</projectDescription>
我已按照指示设置m2e Maven Eclipse Plugin。我使用build-helper-maven-plugin(使用eclipse连接器)在源文件夹中包含生成的源。
当我在eclipse中编译它时,JiBX绑定运行正常 - 我可以看到JiBX控制台中的输出和目标/ classes目录中的修改类。
然后我在战争神器中使用这个生成的jar。
项目文件:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>my-webapp</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
</projectDescription>
我生成的org.eclipse.wst.common.component
文件是(部分):
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="my-webapp">
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<dependent-module archiveName="my-binding-1.79.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/my-binding/my-binding">
<dependency-type>uses</dependency-type>
</dependent-module>
<property name="context-root" value="my-webapp"/>
<property name="java-output-path" value="/my-webapp/target/classes"/>
</wb-module>
</project-modules>
我使用'没有发布的服务模块'和'永不发布自动'选项集运行wtp。
当试图在jar中引用jibx修改的类时,我在引用JiBX生成的方法时得到标准java.lang.NoSuchMethodError
。绑定项目的目标目录仍包含jibx修改的类文件。
这可能是一个错误的路径,但是当我修改jar工件的.project文件以跳过wtp添加的性质时,它似乎有效,即用以下方式重建my-binding项目:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>my-binding</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.jibx.eclipse.JibxBindingBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.jibx.eclipse.JibxNature</nature>
</natures>
</projectDescription>
..重新启动webapp,它运行正常。重建webapp,然后将性质添加回绑定项目并再次中断。
我在这里错过了一个伎俩(我曾希望旧的wtp-eclipse舞蹈成为过去)。有什么想法吗?
更新 在进一步播放之后,我将其缩小到共享类的破坏绑定
从命令行构建时,似乎所有绑定一次构建(或者至少不会更改依赖项jar中的类),但是当通过eclipse插件构建时,各种项目“消灭了来自早期绑定的信息“,根据this的结构化绑定部分 - 工厂类被破坏。
我正在努力将公共类绑定拉到预编译包含中,但这不是一个小工作 - 我们有很多共享类,并且有人在进行更改时必然会错过共享对象绑定。是否有任何方法可以标记与每个项目关联的绑定(命名为?),以便多个工厂类可以存在于公共类包中而不是覆盖它们,即。
com.alfonzo.common
shared.class
foobar1_JiBX_bindingFactory.class
foobar2_jibx_bindingFactory.class
那么项目foobar1,包括共享类的构建绑定可以引用它的工厂,而项目foobar2引用另一个。
或者我完全误解了这个?...