启动应用程序时排除类路径中的类或包

2024-02-18

我有多个*.jar文件夹内的文件,它们全部包含在类路径中,以便在 Microsoft Windows 操作系统中启动指定的主类。目前是这样完成的:

@echo off
java -Xmx1024M -cp libs/*;. org.test.Main

现在我遇到了问题,里面libs文件夹中有两个 JAR 文件,它们都有一个相同的包org.test.configuration。两者是不同的,当我现在启动程序时,我会收到错误,因为 Java VM 选择了错误的程序。

如何在我的启动脚本中排除一个特殊的包或一个特殊的类? (当然我可以从错误的jar中删除这个包,但我不想使用这种方法......)


Java 按顺序在类路径中搜索包/类。而不是使用通配符...

java -Xmx1024M -cp libs/*;. org.test.Main

...按照所需的顺序写出类路径,其中包含“正确”的 jarorg.test.configuration先打包。

java -Xmx1024M -cp libs/test-config.jar;libs/other.jar;libs/etc.jar;. org.test.Main

Edit

您也许仍然可以使用通配符,只需首先显式列出所需的 jar,然后让它在类路径中重复:

java -Xmx1024M -cp libs/test-config.jar;libs/*;. org.test.Main

这里有一个最小、完整、可验证的示例 https://stackoverflow.com/help/mcve:

org\test\Main.java(在 main.jar 中):

package org.test;

import org.test.configuration.Config;

public class Main {

    public static void main(String[] args) {
        Config cfg = Config.getConfig();
        System.out.println(cfg);
    }
}

org\test\configuration\Config.java (在 config1.jar 中):

package org.test.configuration;

public class Config {
    public static Config getConfig() {
        return new Config();
    }
}

org\test\configuration\Config.java(在 config2.jar 中):

package org.test.configuration;

public class Config {
    public static Config getConfig() {
        return null;
    }
}

java -cp 库\*;。 org.test.Main
org.test.configuration.Config@1540e19d

java -cp libs\config2.jar;libs\*;. org.test.Main
null

仅使用libs\*在类路径中导致 config1.jar 首先被包含,并且实时Config对象被返回。使用libs\config2.jar;libs\*导致Config首先包含 config2.jar,并且null被退回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启动应用程序时排除类路径中的类或包 的相关文章

随机推荐