【发布时间】:2012-08-26 23:30:38
【问题描述】:
好的,所以我有以下文件树:
<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 中搜索所需的类。我已经看过很多次了。
【问题讨论】:
-
我不确定,但我认为您不能在清单文件中使用通配符。如果您从字面上列出所有像
Class-Path: lib/a.jar lib/b.jar这样的罐子,它肯定会起作用。作为另一种组合,你可以试试Class-Path: lib/**(注意2星不是错字)
标签: java classpath classloader manifest