我编写了一个大约300千字节的应用程序。 它使用的jar文件(库)大约需要10兆字节。
这些库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
答案 0 :(得分:3)
只需将CLASSPATH
环境变量设置为指向.jar即可
或者将-classpath选项传递给java。
以下是如何操作under windows
答案 1 :(得分:3)
注意不能同时使用-cp和-jar。当您执行java -jar时,java期望在MANIFEST.MF文件中声明引用的jar。我认为你的命令行应该把你的jar放在“cp”里面,并在命令行上明确地调用主类。
如果您担心尺寸,另一个解决方案是使用JNLP部署您的应用程序并使用Pack200压缩您的jar。
答案 2 :(得分:2)
您可以使用Java Web Start启动您的应用程序吗?这将允许您在安装时外部化您的依赖项。
答案 3 :(得分:0)
希望库文件的路径可以由系统环境变量定义。
这不是CLASSPATH的用途吗?
例如,我将所有相关的罐子保存在$ {HOME} /罐中。我的.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将其包含在类路径中。
答案 4 :(得分: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变量...