java jar 忽略输出_Java忽略jar文件清单中的Class-Path条目

我已经搜索了互联网,我搜索了stackoverflow,发现很多帖子都在问这个问题,但是没有一个具体的答案.

简短的版本是:我有一个jar文件,它引用了清单中的其他jar文件.然后我使用java -jar test.jar运行jar文件,但它不会将jar依赖项添加到类路径中.

长版本:我做了一个小实验,以确认它对我的项目不是特别的.我在eclipse中创建了一个简单的Java项目,只有一个类.这个类所做的就是将类路径写入std-out:

package test;

import java.net.URL;

import java.net.URLClassLoader;

public class Test {

public static void main(String[] args){

ClassLoader cl = ClassLoader.getSystemClassLoader();

URL[] urls = ((URLClassLoader)cl).getURLs();

for(URL url: urls){

System.out.println("CP: "+url.getFile());

}

}

}

然后我创建了一个“lib”文件夹并在其中放入一个随机的jar文件并将其添加到类路径中.文件夹结构现在看起来像这样:

Test

|- src/test/Test.java

|- lib/mysql-connector-java-3.1.14-bin.jar

现在,当我从Eclipse运行它时,我得到以下输出:

CP: /home/username/workspace/Test/bin/

CP: /home/username/workspace/Test/lib/mysql-connector-java-3.1.14-bin.jar

好的,现在我使用Eclipse将项目导出到一个可运行的jar.我选择“将所需库复制到生成的jar旁边的子文件夹”选项.

这将创建以下结构:

/tmp/Test

|- test.jar

|- test_lib/mysql-connector-java-3.1.14-bin.jar

如果我查看Eclipse创建的Test.jar,它看起来像这样:

test.jar

|- test/Test.class

|- META-INF/MANIFEST.MF

MANIFEST.MF的内容是:

Manifest-Version: 1.0

Class-Path: . test_lib/mysql-connector-java-3.1.14-bin.jar

Main-Class: test.Test

是的,在Main-Class属性之后有一个空行(我提到这是因为有些人在网上发帖说原因可能是最后一个缺少的换行符).

所以,一切看起来都很好.我用java -jar test.jar运行它并得到以下输出:

CP: /tmp/Test/test.jar

所以classpath只包含我想要运行的jar文件. MANIFEST中的Class-Path:属性被完全忽略.

如果我用java -cp test.jar test.Test运行它会发生同样的事情

如何正确使用MANIFEST.MF中的Class-Path属性?我无法理解我的生活.特别是因为-cp和-jar不兼容,我不知道如何在使用-jar参数的同时指定类路径.

非常感谢提前.

还有一些我可以提前回答的事情:

>“在最后一行之后是否有换行符?” – 是的

>“这可能是日食错误的MANIFEST.MF吗?” – 可能是,但是当我用蚂蚁制作罐子时,我遇到了同样的问题.因此,如果eclipse和ant都会使清单变形,我不知道应该如何格式化它.

>“你试过Java版本的平台?” – 我在Windows 10上尝试过Java8,在Fedora Linux上尝试过Java6,Java7和Java8.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值