[英]Able to run java program from IntelliJ but not from command line
我正在做一个项目。 我可以从IntelliJ中运行该程序,但是当我尝试使用
java -cp <my jar> <Main class>
我得到一个java.lang.NoClassDefFoundError
Exception in thread "main" java.lang.NoClassDefFoundError: org/nocrala/tools/gis/data/esri/shapefile/ValidationPreferences
at Converter2.parse(Converter2.java:26)
at Main.main(Main.java:19)
Caused by: java.lang.ClassNotFoundException: org.nocrala.tools.gis.data.esri.shapefile.ValidationPreferences
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
我怎样才能解决这个问题?
请问您确切的<Main class>
什么? 另外,您如何包装广口瓶? 也许您没有包括所有依赖项jar库? (也许在这种情况下为nocrala)?
看起来Main.main()已在执行。
我在jar
文件上做了一个jar xf
,它只显示我.classes
的.java
文件的.classes
。 这给了我一个提示。 基本上, mvn package
没有将依赖项打包到jar
文件中。 我搜索了一下,发现这对如何依赖打包成链接jar
。 我编辑了pom.xml
并在其中粘贴了以下代码(直接取自上述链接)
<build>
<plugins>
<!-- any other plugins -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
现在,当我运行mvn package
它生成了一个foo-jar-with-dependencies.jar
,我能够使用java -cp ...
从命令行成功执行它。 我还对它进行了jar xf
验证,现在它包含了我所有的依赖项。 文件大小的差异也很大,因为我在项目中引入了许多第三方程序包。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.