Почему maven создает исключение InvocationTargetException?
Я бегу 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.
Почему это происходит? (Это смущает меня и смущает моих пользователей).
1 ответ
Методы вызова сказали нам следующее:
Reflection предоставляет средства для вызова методов в классе. Как правило, это будет необходимо, только если невозможно привести экземпляр класса к нужному типу в неотражающем коде.
Методы вызываются с
java.lang.reflect.Method.invoke()
, Первый аргументthe object instance
на котором этот конкретный метод должен быть вызван. (Если метод является статическим, первый аргумент должен быть нулевым.) Последующие аргументы являютсяmethod's parameters
,Если базовый метод генерирует исключение, он будет обернут
java.lang.reflect.InvocationTargetException
, Исходное исключение метода может быть получено с использованием механизма цепочки исключенийInvocationTargetException.getCause()
метод.
Поскольку трассировка стека также сказала нам, что exec:java
также использует Reflection
также. Затем оригинальное исключение также переносится. Пожалуйста, обратитесь к исходному коду в org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297) для дальнейшего использования.
Я надеюсь, что это может помочь.