2

我编写了一个大约 300 KB 的应用程序。它使用的 jar 文件(库)大约需要 10 megz。

这些库 jar 文件在我编写的其他应用程序中使用,因此我希望它们位于外部中心位置(含义 - 同一台计算机中某个硬盘驱动器上的路径)。希望库文件的路径可以由系统环境变量定义。

我为这个问题寻找了很好的解决方案,但找不到可靠的东西。我猜该解决方案将包括一个 ant 构建,并且可能对 MANIFEST 文件进行一些更改。试图这样做,但据我了解,清单文件中的类路径不能包含任何类型的变量。

先感谢您!

编辑:在与下面的好心人讨论后。我现在使用以下命令提示符。还是不行。

java -cp C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/woodstox.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/activation.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/FastInfoset.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/http.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/jaxb-api.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/jaxb-impl.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/jaxb-xjc.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/jaxws-api.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/jaxws-rt.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/jaxws-tools.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/jsr173_api.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/jsr181-api.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/jsr250-api.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/mimepull.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/resolver.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/saaj-api.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/saaj-impl.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/stax-ex.jar;C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/streambuffer.jar;C:/Work/svn/svn55/CommonLibs/lib/ws/jsr262-ri/jmxws.jar;C:/Work/svn/svn55/CommonLibs/lib/ws/jsr262-ri/jmxws-doctool.jar;C:/Work/svn/svn55/CommonLibs/lib/ws/jsr262-ri/wiseman-core.jar -Dcom.MyCompany.log.directory=C:/Oracle/Middleware/user_projects/domains/MyCompany/servers/AdminServer/logs -Dcom.MyCompany.config.directory=C:/temp/Apache/Config -jar jmx2snmp.jar
4

5 回答 5

3

只需将您的CLASSPATH环境变量设置为指向您的 .jar 即可。
或者将 -classpath 选项传递给 java。

下面是windows下的操作方法

于 2010-01-19T14:53:06.423 回答
3

注意不能同时使用-cp 和-jar。当您执行 java -jar 时,java 期望在 MANIFEST.MF 文件中声明引用的 jar。我认为您的命令行应该可以将您的 jar 放在“cp”中,并在命令行上明确调用主类。

如果您关心大小,另一种解决方案是使用 JNLP 部署您的应用程序并使用Pack200压缩您的 jar 。

于 2010-01-19T16:49:10.917 回答
2

您可以使用 Java Web Start来启动您的应用程序吗?这将允许您在安装时外部化您的依赖项。

于 2010-01-19T14:52:56.720 回答
0

希望库文件的路径可以由系统环境变量定义。

这不是 CLASSPATH 的用途吗?

例如,我将所有相关的 jars 保存在 ${HOME}/jars 中。我的 .bashrc 包含

CLASSPATH=$(cygpath -w $HOME/jars/log4j-1.2.15.jar)
for j in $HOME/jars/*.jar
        do
        h=$(cygpath -w $j)
        CLASSPATH=$CLASSPATH\;$h
done
export CLASSPATH

这是 Windows 和 Cygwin,Unix 将非常相似(并且也必须使用 Windows 内置函数来做到这一点)。因此,如果应用程序需要 jar,我只需将依赖项放入 jar 中,下一个 shell 会将其包含在其类路径中。

于 2010-01-19T14:56:49.720 回答
0

如果使用 -jar 选项运行程序,则既不使用 CLASSPATH 变量,也不使用 -cp 选项。文档指出:

使用此选项时,JAR 文件是所有用户类的来源,其他用户类路径设置将被忽略

也就是说,类路径必须在 MANIFEST 文件的 Class-Path: 行中给出。

不使用 -jar 选项,而是将 JAR 添加到 -cp 选项的 CLASSPATH 并使用主类名启动

java -cp C:/Work/svn/svn55/CommonLibs/lib/jmx/jaxws-ri/woodstox.jar;
    ...;
    C:/Work/svn/svn55/CommonLibs/lib/ws/jsr262-ri/wiseman-core.jar;jmx2snmp.jar 
    -Dcom.MyCompany.log.directory=...
    -Dcom.MyCompany.config.directory=C:/temp/Apache/Config <package.classname>

有了这个 LONG 类路径,最好使用 CLASSPATH 变量......

于 2010-01-19T16:49:37.190 回答