2017-02-09 15 views
4

Прежде всего: я новичок в maven. Я сделал свое первое приложение maven и успешно протестировал его в среде IDE. Конструкция всегда была успешной, и все работало как шарм.Maven исполняемый Jar выдает ошибку при запуске

Теперь я хочу экспортировать проект в качестве исполняемого флага с зависимостями, встроенными, но я не совсем уверен, почему он не работает.

Я добавил следующее в мой файл пом, как это было то, что я нашел на различные ответы на аналогичный вопрос

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <mainClass>com.pwc.scfa.pensareautomatio3.Main</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
     </plugins> 
</build> 

Я понимаю, что это указывает главный класс для виртуальной машины Java, чтобы начать, как IDE не устанавливает это автоматически.

Я нашел банку в каталоге целей, скопировал ее в другой каталог и попытался выполнить ее.

К сожалению, следующие ошибки выбрасываются:

enter image description here

enter image description here

Можете ли вы дать мне подсказку, где я мог бы пойти не так? Это было бы прекрасно. (Я использую NetBeans, если это какой-либо помощи.)

Вот мой StackTrace:

C:\Users\scfa\Desktop>java -jar PensareAutomatio-1.1.jar 
Error: A JNI error has occurred, please check your installation and try again 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/openxm 
l4j/exceptions/InvalidFormatException 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
     at java.lang.Class.privateGetMethodRecursive(Unknown Source) 
     at java.lang.Class.getMethod0(Unknown Source) 
     at java.lang.Class.getMethod(Unknown Source) 
     at sun.launcher.LauncherHelper.validateMainClass(Unknown Source) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: org.apache.poi.openxml4j.exceptions 
.InvalidFormatException 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     ... 7 more 

Спасибо :)

+1

Вы можете открыть файл jar с помощью инструмента архивирования (например, 7zip или winrar)? Если да, то что вы могли бы разместить в нем? также попробуйте запустить его из командной строки, чтобы увидеть трассировку стека (в окнах используйте cmd, перейдите в папку, содержащую банку, и введите «java -jar myjar.jar» – gybandi

ответ

1

Если я правильно, Maven-банку-плагин создает jar со всеми скомпилированными файлами .class, но без зависимостей.

Я бы рекомендовал использовать Maven-сборочно-плагин и привязки его к фазе выполнения пакета, таким образом он будет построен при запуске МВНОВ установки

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
    <archive> 
     <manifest> 
     <mainClass>com.pwc.scfa.pensareautomatio3.Main</mainClass> 
     </manifest> 
    </archive> 
    <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
    </descriptorRefs> 
    </configuration> 
    <executions> 
    <execution> 
     <id>make-assembly</id> <!-- this is used for inheritance merges --> 
     <phase>package</phase> <!-- bind to the packaging phase --> 
     <goals> 
     <goal>single</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

См this ответа для получения дополнительной информации ,

+1

Спасибо большое :) Проблема была, поскольку вы рекомендовали отсутствующие зависимости, и я не знал, как экспортировать runnable, включая эти. –

 Смежные вопросы

  • Нет связанных вопросов^_^