能够从IntelliJ运行java程序,但不能从命令行

时间:2015-09-11 23:25:19

标签: java

我正在开展一个项目。我可以从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)

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

请问您的确切<Main class>是什么?你是怎么收拾罐子的?也许你没有包含所有的依赖jar库? (也许在这种情况下是nocrala)?

看起来Main.main()已经在执行。

答案 1 :(得分:0)

我在jar xf文件上做了jar,它只向我显示了.classes我写过的.java文件。这给了我一个暗示。基本上mvn package没有将依赖项打包到jar文件中。我搜索了一下,找到了关于如何将依赖关系打包到jar的{​​{3}}链接。我编辑了我的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并验证它现在包含了我所有的依赖项。文件大小的差异也很大,因为我在项目中提取了很多第三方软件包。