3

XJCタスク定義を含むantbuild.xmlファイルがあります。

<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
  <classpath>
    <fileset dir="jaxb" includes="*.jar" />
  </classpath>
</taskdef>

jaxb dircotnainsjaxb-xjc.jarとXJCTaskクラスが含まれています。

次に、いくつかのターゲットでxjcタスクを呼び出します。

<target name="mytarget">
 <xjc target="src" package="com.p1.Person" header="false">
   <schema dir="src/com/p1" includes="Person.xsd"/>
 </xjc>
</target>

Intellij IDEAは、xjc呼び出しの構造/スキーマを認識せず、すべての属性(ターゲット、パッケージ、ヘッダー)と含まれている要素(スキーマ)を赤で強調表示します。

Antオプションを選択し、jaxb-xjc.jarを追加のクラスパスリストに追加した場合、これは役に立ちません。バンドルされたAnt1.8.2を使用しています

悪い点は、IDEAでコンパイルすると、関連するエラーがたくさん発生することですが、ビルドスクリプトを実行すると、すべてが正常に機能します。これらのエラーを抑制したい。

何か案は?

4

1 に答える 1

3

答えは、IDEA課題追跡システムの関連するバグのこのコメントから得られます。 http://youtrack.jetbrains.net/issue/IDEA-11248#comment=27-57354

IDEAでのXJCTaskの問題については、taskdefでXJC2Taskを使用するだけです。

XJC2Taskのソースを見ると、IDEAがそれらを解決できるようにセッターが公開されています:http: //grepcode.com/file/repo1.maven.org/maven2/com.sun.xml.bind/jaxb-xjc /2.1.13/com/sun/tools/xjc/XJC2Task.java#XJC2Task.setPackage%28java.lang.String%29

ただし、XJCTaskは、その場でJAXB1またはJAXB2に動的に委任するクラスにすぎないため、taskdefで定義しているクラスにはセッターがないため、IDEAはこれらのプロパティを解決できません。 http://grepcode.com/file/repo1.maven.org/maven2/com.sun.xml.bind/jaxb-xjc/2.1.13/com/sun/tools/xjc/XJCTask.java#XJCTask.getCoreClassName% 28%29

編集:基本的にJAXB2では、XJCTaskには実際にはタスクが含まれていません。実際のタスクXJC2Taskに委任されます。

ソースへのより良いリンクは次のとおりです。

JAXB1のXJCTaskhttp : //java.net/projects/jaxb/sources/version1/content/trunk/jaxb-ri/xjc/src/com/sun/tools/xjc/XJCTask.java?rev=197

JAXB2のXJCTaskhttp : //java.net/projects/jaxb/sources/version2/content/trunk/jaxb-ri/xjc/facade/com/sun/tools/xjc/XJCTask.java?rev=3863

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を直接呼び出すだけです。

于 2012-01-14T15:50:04.660 に答える