2017-02-09 152 views
4

首先:我是maven的新手。 我做了我的第一个Maven应用程序,并在IDE中成功测试了它。构建总是成功的,一切都像魅力一样。Maven可执行文件Jar在启动时抛出错误

现在我想将项目导出为内置依赖项的可执行jar,但我不确定它为什么不起作用。

添加以下到我的POM文件,因为这是我在不同的答案发现了类似的问题

<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> 

我明白,这指定的JVM启动主类,作为IDE不会自动设置。

我将jar放置在目标目录中,将其复制到另一个目录并尝试执行它。

可悲的是下面的错误抛出:

enter image description here

enter image description here

能否请你给我一个提示,我在那里可能出现了问题?那太好了。 (我使用NetBeans,如果这是任何帮助。)

这里是我的堆栈跟踪:

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

你可以使用归档工具(如7zip或winrar)打开jar文件吗?如果是这样,你可以发布它的内容? 也尝试从命令行运行它来查看堆栈跟踪(在Windows中使用cmd,导航到包含该jar文件夹并键入“java -jar myjar.jar” – gybandi

回答

1

如果我是正确的,Maven的JAR-插件创建一个jar包含所有已编译的.class文件,但没有依赖关系。

我推荐使用Maven的组装插件并将其绑定到包的执行阶段,这样它会运行时建MVN安装

<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

非常感谢:) 问题是,因为你推荐缺少的依赖关系,并且我不知道如何导出包括这些的可运行程序。 –