免責聲明:我是jaxb2-annotate-plugin的作者。
首先,我沒有提供命令行示例(據我所知),沒有人使用命令行或批處理腳本進行模式編譯。至少到目前爲止沒有任何要求。對於Ant和Maven有samples,對Ant來說是一個接近命令行的用法。
接下來,我想知道xjc.bat
是什麼。
如果它從Java分發中調用xjc.exe
,這很可能根本不適用於第三方插件,而不僅僅是jaxb2-annotate-plugin
。原因是與Java分發的XJC版本有一個重命名的包:com.sun.tools.**
- >com.sun.tools.internal.**
。這打破了,與插件自然兼容。所以請確保xjc.bat
不會調用Java發行版中包含的xjc.exe
。
我希望xjc.bat
從JAXB RI Jars調用com.sun.tools.xjc.XJCFacade
。
要執行的插件,你需要兩樣東西:
- 包括所有所需的依賴到classpath中。
- 使用
-Xannotate
命令行參數打開插件。
這些依賴關係:
<!-- JAXB2 Basics library -->
<include name="jaxb2-basics-*.jar"/>
<include name="jaxb2-basics-annotate*.jar"/>
<!-- JAXB2 Basics library dependencies -->
<include name="annox-*.jar"/>
<include name="javaparser-*.jar"/>
<include name="commons-beanutils-*.jar"/>
<include name="commons-logging-*.jar"/>
<include name="commons-lang3-*.jar"/>
下面是完整的依賴關係樹(含版本):
[INFO] org.jvnet.jaxb2_commons:jaxb2-basics-annotate:jar:1.0.3-SNAPSHOT
[INFO] +- org.jvnet.jaxb2_commons:jaxb2-basics-tools:jar:0.8.1:compile
[INFO] | +- commons-beanutils:commons-beanutils:jar:1.7.0:compile
[INFO] | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- com.sun.xml.bind:jaxb-impl:jar:2.2.7:provided
[INFO] | +- com.sun.xml.bind:jaxb-core:jar:2.2.7:provided
[INFO] | | +- javax.xml.bind:jaxb-api:jar:2.2.11:provided
[INFO] | | \- com.sun.istack:istack-commons-runtime:jar:2.16:provided
[INFO] | \- com.sun.xml.fastinfoset:FastInfoset:jar:1.2.12:provided
[INFO] | \- javax.xml.bind:jsr173_api:jar:1.0:provided
[INFO] +- com.sun.xml.bind:jaxb-xjc:jar:2.2.7:provided
[INFO] +- org.jvnet.jaxb2.maven2:maven-jaxb2-plugin-testing:jar:0.9.0:test
[INFO] | \- org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:jar:0.9.0:test
[INFO] | +- org.jvnet.jaxb2.maven2:maven-jaxb2-plugin-core:jar:0.9.0:test
[INFO] | | +- com.sun.org.apache.xml.internal:resolver:jar:20050927:test
[INFO] | | +- org.apache.maven:maven-plugin-api:jar:2.0.9:test
[INFO] | | +- org.sonatype.plexus:plexus-build-api:jar:0.0.7:test
[INFO] | | \- org.apache.maven:maven-project:jar:2.0.9:test
[INFO] | | +- org.apache.maven:maven-settings:jar:2.0.9:test
[INFO] | | +- org.apache.maven:maven-profile:jar:2.0.9:test
[INFO] | | +- org.apache.maven:maven-model:jar:2.0.9:test
[INFO] | | +- org.apache.maven:maven-artifact-manager:jar:2.0.9:test
[INFO] | | | +- org.apache.maven:maven-repository-metadata:jar:2.0.9:test
[INFO] | | | \- org.apache.maven.wagon:wagon-provider-api:jar:1.0-beta-2:test
[INFO] | | +- org.apache.maven:maven-plugin-registry:jar:2.0.9:test
[INFO] | | \- org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1:test
[INFO] | | \- classworlds:classworlds:jar:1.1-alpha-2:test
[INFO] | +- org.codehaus.plexus:plexus-utils:jar:1.5.15:test
[INFO] | +- org.jvnet.jaxb2.maven2:maven-jaxb22-plugin:jar:0.9.0:test
[INFO] | \- org.apache.maven.plugin-tools:maven-plugin-annotations:jar:3.2:test
[INFO] | \- org.apache.maven:maven-artifact:jar:3.0:test
[INFO] +- org.jvnet.annox:annox:jar:1.0.1:compile
[INFO] | +- org.apache.commons:commons-lang3:jar:3.2.1:compile
[INFO] | +- commons-io:commons-io:jar:1.2:compile
[INFO] | \- com.google.code.javaparser:javaparser:jar:1.0.11:compile
[INFO] \- junit:junit:jar:4.11:test
[INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test
Maven的東西是不相關的,否則你應該能夠看到的版本。
希望這會有所幫助。
說實話,我有點不願意在批處理/命令行示例中投入時間。但是如果你能找到工作的話,我會把它添加到樣本中。
爲什麼你真的需要它在命令行?
確保正確的罐子位於classpath內,例如 'xjc.bat -classpath「jaxb2-basics-annotate-0.6.0.jar」' – Xstian
感謝您的迴應,我做到了,但我得到了以下錯誤==>線程「main」中的異常java.lang.NoClassDefFoundError :組織/ jvnet/jaxb2_commons /插件/ AbstractParameterizablePlugin 在java.lang.ClassLoader.defineClass1(本機方法) 在java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 在需要java.lang.ClassLoader.defineClass(類加載器.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) – Samy
我認爲還缺少'jaxb2-basics-tools-0.6.0.jar'。嘗試將它添加到類路徑中。 – Xstian