1

好的,所以我有以下文件树:

<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 中搜索所需的类。我已经看过很多次了。

4

3 回答 3

2

对于 Linux,您应该能够执行以下操作:

java -cp MyApp.jar:lib:someotherjar.jar myapp.Main

您可以(可选!)对包含“main”的 .jar 使用“-jar”,或者可以将路径和 jar 文件(具有限定路径名的 .jar 文件)的任意组合添加到类路径中。

这是Java文档

这是一个更好的解释

于 2012-08-26T23:38:23.580 回答
1

我有同样的问题。

默认的类路径是当前目录。设置 CLASSPATH 变量或使用 -classpath 命令行选项会覆盖该默认值,因此如果要将当前目录包含在搜索路径中,则必须在新设置中包含一个点 (.)。

甲骨文文档

于 2018-07-05T23:06:51.627 回答
0

通过系统变量或通过将 lib 目录添加到您的类路径

SET CLASSPATH=%CLASSPATH%;MYAPP/LIB;.

然后做一个java -jar MyApp.jar

于 2012-08-26T23:35:17.340 回答