启动应用程序时排除 class 或 class 路径内的包
Exclude class or package inside classpath when starting an application
我在一个文件夹中有多个 *.jar
文件,它们都包含在 class 路径中,以便在 Microsoft Windows 中启动指定的主要 class OS。目前是这样完成的:
@echo off
java -Xmx1024M -cp libs/*;. org.test.Main
现在我遇到了问题,在 libs
文件夹中有两个 JAR 文件,它们都有一个相同的包 org.test.configuration
。两者不同,当我现在启动程序时,我会收到错误消息,因为 Java VM 选择了错误的程序。
如何在我的启动脚本中排除一个特殊包或一个特殊 Class? (当然我可以把这个包从错误的jar里删掉,但是我不想用这个方法。。。)
Java 按顺序在 class 路径中搜索 packages/classes。而不是使用通配符 ...
java -Xmx1024M -cp libs/*;. org.test.Main
...按照需要的顺序写出class路径,首先是包含"correct"org.test.configuration
包的jar。
java -Xmx1024M -cp libs/test-config.jar;libs/other.jar;libs/etc.jar;. org.test.Main
编辑
您仍然可以使用通配符,只需首先明确列出所需的 jar,然后让它在 class 路径中复制:
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
在 class 路径中仅使用 libs\*
导致首先包含 config1.jar,并返回一个活动的 Config
对象。使用 libs\config2.jar;libs\*
导致首先包含 config2.jar 中的 Config
,然后返回 null
。
我在一个文件夹中有多个 *.jar
文件,它们都包含在 class 路径中,以便在 Microsoft Windows 中启动指定的主要 class OS。目前是这样完成的:
@echo off
java -Xmx1024M -cp libs/*;. org.test.Main
现在我遇到了问题,在 libs
文件夹中有两个 JAR 文件,它们都有一个相同的包 org.test.configuration
。两者不同,当我现在启动程序时,我会收到错误消息,因为 Java VM 选择了错误的程序。
如何在我的启动脚本中排除一个特殊包或一个特殊 Class? (当然我可以把这个包从错误的jar里删掉,但是我不想用这个方法。。。)
Java 按顺序在 class 路径中搜索 packages/classes。而不是使用通配符 ...
java -Xmx1024M -cp libs/*;. org.test.Main
...按照需要的顺序写出class路径,首先是包含"correct"org.test.configuration
包的jar。
java -Xmx1024M -cp libs/test-config.jar;libs/other.jar;libs/etc.jar;. org.test.Main
编辑
您仍然可以使用通配符,只需首先明确列出所需的 jar,然后让它在 class 路径中复制:
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@1540e19djava -cp libs\config2.jar;libs\*;. org.test.Main
null
在 class 路径中仅使用 libs\*
导致首先包含 config1.jar,并返回一个活动的 Config
对象。使用 libs\config2.jar;libs\*
导致首先包含 config2.jar 中的 Config
,然后返回 null
。