Intellijのアイデアは、XJCタスク属性を認識していません
-
27-10-2019 - |
質問
XJCタスク定義を備えたANT Build.xmlファイルがあります:
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
<classpath>
<fileset dir="jaxb" includes="*.jar" />
</classpath>
</taskdef>
jaxb dirは、内部内にxjctaskクラスを備えたJaxb-xjc.jarをcotnains cotnains cotnains cotnains。
次に、いくつかのターゲットでXJCタスクを呼び出します。
<target name="mytarget">
<xjc target="src" package="com.p1.Person" header="false">
<schema dir="src/com/p1" includes="Person.xsd"/>
</xjc>
</target>
Intellijのアイデアは、XJC呼び出しの構造/スキーマを認識せず、すべての属性(ターゲット、パッケージ、ヘッダー)および赤の要素(スキーマ)を含む強調表示を強調します。
アリのオプションを選択し、Jaxb-XJC.jarを追加のクラスパスリストに追加する場合、これは役に立ちません。バンドルアリ1.8.2を使用します
悪いことは、アイデアでそれをコンパイルするとき、私は多くの関連するエラーを取得することですが、ビルドスクリプトを実行すると、すべてが正常に機能することです。これらのエラーを抑制したいです。
何か案は?
解決
答えは、Idea Issue Trackerの関連するバグのこのコメントから来ています。http://youtrack.jetbrains.net/issue/idea-11248#comment = 27-57354
XJCtaskのIDEAの問題については、TaskDefでXJC2Taskを使用してください。
XJC2Taskのソースを見ると、セッターが露出しているため、アイデアがそれらを解決できるようになりました。http://grepcode.com/file/repo1.maven.org/maven2/com.sun.xml.bind/jaxb-xjc/2.1.13/com/sun/tools/xjc/xjc2task.java#xjc2task. 28java.lang.String%29
ただし、XJCtaskは、その場でJAXB1またはJAXB2に動的に委任するクラスにすぎないため、TaskDefで定義しているクラスにはセッターがないため、これらのプロパティを解決することはできません。http://grepcode.com/file/repo1.maven.org/maven2/com.sun.xml.bind/jaxb-xjc/2.1.13/com/sun/tools/xjc/xjctask.java#xjctask. 28%29
編集:基本的にjaxb2では、xjctaskは実際にはタスクを含んでいません - 実際のタスクxjc2taskに委任します。
ソースへのより良いリンクは次のとおりです。
jaxb 1のxjctask 1http://java.net/projects/jaxb/sources/version1/content/trunk/jaxb-ri/xjc/src/com/sun/tools/xjc/xjctask.java?rev=197
jaxb2のxjc2taskhttp://java.net/projects/jaxb/sources/version2/content/trunk/jaxb-ri/xjc/src/com/sun/tools/xjc/xjc2task.java?rev=3863
jaxb-xjc-ri-2.x-xx.jarを見ると、「1/com/sun/tools/xjc/」というパッケージが含まれていることがわかります。
これは、バージョンを1.0に設定するとANTタスクを実行する場合、JaxB2のXJCtaskから呼び出されるものです。当時のV1からV2への移行を容易にするために入れられたと思います。
XJC2Taskは、V2を使用している場合に呼び出されます。
現実的には、1.0に設定するつもりはないため、XJC2Taskを直接呼び出すだけです。