gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:51:09 25 4
gpt4 key购买 nike

我在一个文件夹中有多个 *.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

...按照所需的顺序写出类路径,首先是包含“正确”org.test.configuration 包的 jar。

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

编辑

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

java -Xmx1024M -cp libs/test-config.jar;libs/*;. org.test.Main
<小时/>

这是一个Minimal, Complete, Verifiable Example :

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 libs\*;. 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\* 导致首先包含 config2.jar 中的 Config,并返回 null

关于java - 启动应用程序时排除类路径中的类或包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38617107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com