加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 可执行文件JAR忽略其自己的Class-Path属性

发布时间:2020-12-14 16:39:52 所属栏目:Java 来源:网络整理
导读:我使用 https://stackoverflow.com/a/5893391/14731中的指令向Class-Path属性添加任意条目.这是我的MANIFEST.MF文件: Manifest-Version: 1.0Class-Path: jace-runtime.jarMain-Class: org.jace.examples.Test 我定义了org.jace.examples.Test如下: public
我使用 https://stackoverflow.com/a/5893391/14731中的指令向Class-Path属性添加任意条目.这是我的MANIFEST.MF文件:
Manifest-Version: 1.0
Class-Path: jace-runtime.jar
Main-Class: org.jace.examples.Test

我定义了org.jace.examples.Test如下:

public class Test
{
    public static void main(String[] args)
    {
        System.out.println("classpath: " + System.getProperty("java.class.path"));
        System.out.println("PeerExample: " + Class.forName("org.jace.util.ShutdownHook"));
    }
}

其中org.jace.util.ShutdownHook在jace-runtime.jar中定义.当我调用java -jar peer_example1.jar时,我得到以下输出:

classpath:peer_example1.jar
线程中的异常“main”java.lang.ClassNotFoundException:org.jace.util.ShutdownHook

换句话说,Java将可执行JAR文件添加到类路径,但忽略了Class-Path.如果我调用java -cp jace-runtime.jar; peer_example1.jar org.jace.examples.Test我得到预期的输出:

classpath:jace-runtime.jar; peer_example1.jar

有任何想法吗?

解决方法

回答我自己的问题:

>将任意条目添加到Class-Path本身就可以了.当您使用以下命令启用JAR索引时会出现此问题:

<configuration>
  <archive>
    <index>true</index>
  </archive>
</configuration>

Maven将从META-INF / INDEX.LIST中省略您的条目.
>在运行时使用JAR时,Java将查找INDEX.LIST来查找类,而不是MANIFEST.MF.
>因为INDEX.LIST中缺少输入,所以不管清单如何,类加载器都不会找到它们.

一个简单的解决方法是禁用JAR索引.我不知道如何注入任意的Class-Path,启用索引.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读