0

コマンドラインからmavenを実行しています

mvn exec:java -Dexec.mainClass=org.xmlcml.svg2xml.analyzer.DocumentListAnalyzer 
   -Dexec.args=.

プログラムが RuntimeException をスローすると、maven はこれをスローしませんが、InvocationTargetException

java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.RuntimeException: Only one primary allowed for 3 line textL
ineGroup
        at org.xmlcml.svg2xml.text.TextLineGroup.createSuscriptTextLineList(Text
LineGroup.java:181)
        at org.xmlcml.svg2xml.text.TextLineGroup.createHtml(TextLineGroup.java:2
40)

これは、Eclipse の実行時には発生しません。

なぜこれが起こるのですか?(それは私を混乱させ、ユーザーを混乱させました)。

4

1 に答える 1

3

Invoking Methodsは、次のように教えてくれました: -

リフレクションは、クラスのメソッドを呼び出す手段を提供します。通常、これが必要になるのは、非リフレクション コードでクラスのインスタンスを目的の型にキャストできない場合のみです。

メソッドは で呼び出されjava.lang.reflect.Method.invoke()ます。最初の引数the object instance、この特定のメソッドが呼び出される場所です。(メソッドが静的な場合、最初の引数は null にする必要があります。)後続の引数method's parameters.

基になるメソッドが例外をスローした場合それは によってラップされますjava.lang.reflect.InvocationTargetException。メソッドの元の例外は、例外チェーン メカニズムのInvocationTargetException.getCause()メソッドを使用して取得できます。

exec:javaスタックトレースからも、も も使用されていることがわかりReflectionました。次に、元の例外もラップされます。詳細については、 org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)のソース コードを参照してください。

これが役立つことを願っています。

于 2013-04-12T08:52:01.270 に答える