启动应用程序时排除类路径中的类或包 [英] Exclude class or package inside classpath when starting an application

查看:31
本文介绍了启动应用程序时排除类路径中的类或包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一个文件夹中有多个*.jar文件,它们都包含在类路径中,以便在Microsoft Windows OS中启动指定的主类。目前这是这样完成的:

@echo off
java -Xmx1024M -cp libs/*;. org.test.Main
现在我遇到了问题,在libs文件夹中有两个JAR文件,它们都有一个相同的包org.test.configuration。两者是不同的,当我现在启动程序时,我收到错误,因为Java VM选择了错误的程序。

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

推荐答案

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

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 estMain.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 estfigationConfig.java(在config1.jar中):

package org.test.configuration;

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

org estfigationConfig.java(在config2.jar中):

package org.test.configuration;

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

Java-cp libs*;Org.est.Main
邮箱:org.est.configuration@1540e19d

Java-cp libsfig2.jar;libs*;。Org.est.Main

在类路径中仅使用libs*会导致首先包含config1.jar,并返回一个活动的Config对象。使用libsconfig2.jar;libs*会导致首先包含来自config2.jar的Config,并返回null

这篇关于启动应用程序时排除类路径中的类或包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆