如何将Java文件包含在.jar文件中?

3
好的。我的问题是:我正在用Clojure制作一个数据解析器。程序的一部分是它必须能够绘制数据图表。我想,我会使用jFreeChart。然而,我完全不知道如何在JAR文件中包含东西。我的意思是:如果我在类路径中有一个app.jar文件,我似乎无法执行以下操作:
import app.thing.thing2
除非将类路径更改为在jar文件内。
这里的想法是我不认为我可以更改我的类路径,因为我需要设置它来运行Clojure(或者我需要吗?)。全局类路径目前为/usr/share/java。
请不要要求我使用Maven,Ant或任何项目构建工具,除非这是唯一的方法。这是一个个人使用的脚本,不需要太多的开销。
我想知道是否应该只解压缩每个JAR文件,以便我可以引用目录结构?这样做好吗?
如果您需要任何澄清,请告诉我!

JAR文件能用于编译/运行Java代码吗?也许问题出在JAR文件本身,它并不是直接添加到类路径中的(我认为这是一个错误)。如果您告诉我们您用来运行或编译代码的命令/工具,我们可能会更有帮助。 - Grundlefleck
4个回答

6

(Java) CLASSPATH 环境变量的内容对于 Clojure 是可用的,因此如果在运行 Clojure 之前将您的 jar 添加到全局 classpath 中,则会 "看到" 它:

export CLASSPATH=/path/to/jfreechart.jar:$CLASSPATH

但是,在我看来,这不是向 Clojure 的类路径中添加 jar 包的“干净”方式(因为这会使库对任何Java程序可见,可能不是想要的)。相反,应该使用CLOJURE_EXT环境变量。下面是该变量的文档:

# CLOJURE_EXT The path to a directory containing (either directly or as
# symbolic links) jar files and/or directories whose paths
# should be in Clojure's classpath. The value of the
# CLASSPATH environment variable for Clojure will be a list
# of these paths followed by the previous value of CLASSPATH
# (if any).

在我的系统中,它被定义为以下内容:
export CLOJURE_EXT=~/.clojure

因此,要将jfreechart.jar(或任何其他库)添加到Clojure的类路径中,请将其复制(或添加指向它的符号链接)到CLOJURE_EXT变量定义的目录中。

顺便说一下(很抱歉,您的问题不是很清楚),如果您想将一些Java类打包成一个jar文件,则命令类似于:

$ jar cf myjarfile *.class 

您可以在这里找到关于Java Archive Tool(即jar)的文档。

这个答案正是我所需要的。我有时候很难表达清晰的问题。非常感谢! - Luke

2

我完全尊重您不使用项目管理工具的愿望,但是我刚刚打这句话所用的时间比设置leiningen还要长。对于您的一次性脚本,任何工具都会过度臃肿,Pascal Thivent的答案已经很好地解决了这个问题。对于阅读此问题的人们,他们可能希望生成一个jar文件或轻松将Clojure加载到emacs/slime-swank中,我强烈推荐使用leiningen。


1
如果你想回到基础,可以内联你的类路径以包含硬编码位置的JAR文件,所以如果你在Windows上,它会看起来像这样:
java -cp .;%CLASSPATH%;C:/here/it/is/foo.jar com.foo.MyClass

除非我记错了,否则这个问题是关于Clojure的,所以这并没有帮助到提问者。 - Pascal Thivent

0
不确定如何运行Clojure,但是难道你不只是将JAR文件添加到类路径中吗?
即。
/usr/share/java:/home/user/myjarfile.jar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接