好的,我有以下文件树:
<appfolder>
- MyApp.jar
- lib/
- log.jar
- someother.jar
- someother.jar
- someother2.jar
- config.properties
- otherfiles.extension
我已经尝试了几十种启动此应用程序的方法。 MyApp包含以下
MANIFEST.MF:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.7.0_06-b24 (Oracle Corporation)
Main-Class: myapp.Main
Class-Path: MyApp.jar lib/*
如果我调用 java -jar MyApp.jar ,它总是说可以加载lib / log.jar中的所有类。
以下是我尝试过的组合的一部分:
- *.jar lib/*
- *.jar lib/*.jar
- *.jar ./lib/*.jar
- ./*.jar lib/*.jar
- *.jar ./lib/*.jar
- tbc
没有工作。 Java总是告诉我它找不到lib / log.jar中的类
我的下一步尝试是通过命令行指定类路径。
java -cp "MyApp.jar:lib/*" myapp.Main
但即使这样也行不通。在这种情况下,Java说它无法找到myapp.Main类。
我想我做错了,因为我找不到任何方法。如果我把lib / log.jar中的类放到myApp.jar中并启动它就可以了。但这不是解决方案。
有什么想法吗?
修改 我不想命名每一个lib jar。我只希望ClassLoader在ClassPath中搜索所需的类。我已经看过很多次了。
答案 0 :(得分:2)
对于Linux,您应该能够做到这样的事情:
java -cp MyApp.jar:lib:someotherjar.jar myapp.Main
您可以(可选!)对包含“main”的.jar使用“-jar”,或者可以添加路径和jar文件的任意组合(带有限定路径名的.jar文件)到你的类路径。
答案 1 :(得分:1)
我有同样的问题。
默认的类路径是当前目录。设置CLASSPATH 变量或使用-classpath命令行选项会覆盖该变量 默认,因此如果要在搜索中包括当前目录 路径,则必须在新设置中包含点(。)。
答案 2 :(得分:0)
通过系统变量或
将lib目录添加到类路径中SET CLASSPATH=%CLASSPATH%;MYAPP/LIB;.
然后执行java -jar MyApp.jar