几天来,我一直在尝试自己解决这个问题,但是我无法使创建的.jar文件与引用其他.jar库的类一起成功运行。
我在Mac上将DrJava与JDK 0.8_91结合使用。我知道DrJava不是大多数人选择的编辑环境,但是它使我最能找出这个特殊问题,并且应该可以使用任何编辑器来解决,因此我更喜欢不涉及任何建议的建议。切换IDE(我已经尝试过其他)。
我的项目文件结构如下:
java_projects
|
|---App
| |---bin
| | |---com
| | |---app
| | |---Src1.class
| | |---Src2.class
| | |---Etc.class
| |
| |---com
| | |---app
| | |---Src1.java
| | |---Src2.java
| | |---Etc.java
| |
| |---lib
| |---Lib1.jar
| |---Lib2.jar
| |---Etc.jar
|
|---App.drjava
App.drjava是DrJava项目文件,用于跟踪项目结构。
我将java_projects/App/lib/
中的所有库.jar文件添加到了项目设置中DrJava的“额外类路径”区域。
我将项目工作目录设置为java_projects/App/
我将项目根目录设置为java_projects/App/
我将构建目录设置为java_projects/App/bin/
我确保每个.java源文件都以package com.app;
开头
代码使用所有import
语句正确编译,将所有.class文件整齐地放置在java_projects/App/bin
文件夹中,如文件树形图所示。
已编译的可执行.class文件与其他.class文件和.jar库一起正确运行。
但是,当我尝试从java_projects/App/bin/
中的.class文件创建项目.jar文件并尝试运行该App.jar文件时,它失败并出现以下错误(这些库实际上未称为Lib1。 jar等):
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/batik/swing/JSVGCanvas
我知道JSVGCanvas类包含在一个.jar库中,因为该程序使用java_projects/App/bin/
中的.class文件运行,并且我希望DrJava的“额外类路径”参数能够处理引用到App.jar清单文件中的库。我还尝试使用自己的清单文件创建App.jar,并使用jar
命令行工具获得相同的结果。
我也尝试将App.jar移到文件树中的其他位置,但仍无法正常运行。这是我的自定义manifest.mf文件的样子:
Main-Class: com.app.App
Class-Path:
lib/batik-1.10.jar
lib/batik-svg-dom-1.10.jar
lib/batik-all-1.10.jar
lib/batik-svggen-1.10.jar
lib/batik-anim-1.10.jar
lib/batik-svgpp-1.10.jar
lib/batik-awt-util-1.10.jar
lib/batik-swing-1.10.jar
lib/batik-bridge-1.10.jar
lib/batik-transcoder-1.10.jar
lib/batik-codec-1.10.jar
lib/batik-ttf2svg-1.10.jar
lib/batik-css-1.10.jar
lib/batik-util-1.10.jar
lib/batik-dom-1.10.jar
lib/batik-xml-1.10.jar
lib/batik-ext-1.10.jar
lib/fop-transcoder-allinone-2.2.jar
lib/batik-extension-1.10.jar
lib/serializer-2.7.2.jar
lib/batik-gui-util-1.10.jar
lib/w3c-dom.jar
lib/batik-gvt-1.10.jar
lib/xalan-2.7.2.jar
lib/batik-parser-1.10.jar
lib/xercesImpl-2.9.1.jar
lib/batik-rasterizer-1.10.jar
lib/xml-apis-1.3.04.jar
lib/batik-script-1.10.jar
lib/xml-apis-ext-1.3.04.jar
lib/batik-slideshow-1.10.jar
lib/xmlgraphics-commons-2.2.jar
lib/batik-squiggle-1.10.jar
如果您对我所缺少的内容有任何了解,请帮助我!我希望这样的障碍不会成为项目杀手,但是Java的java-class-jar-package-import-classpath的细微差别开始让我发疯:L
在此先感谢您!
更新 我最终放弃了,切换到Eclipse IDE。我花了几个小时来正确设置该项目,但是一旦成功,它就像梦一样。
万一您好奇,那么Eclipse设置使我花了这么长时间的原因是,总而言之,我试图将源文件复制到Eclipse项目中,并且我想Eclipse处理该工作流程的能力很差。因此,如果要将项目移至Eclipse,据我所知,最快的方法是先在新项目中设置文件/包/库层次结构,然后通过Eclipse创建新的源文件,然后从每个文件中复制文本。归档到新的。听起来很乏味,但是其他任何方式和Eclipse都无法正确实现项目层次结构。