替换jar和重定向导入语句

问题描述 投票:0回答:1

我正在尝试找到解决我所面临的独特问题的方法。我们有一个依赖于特定库的Java程序。我们创建了第二个库,该库具有与第一个库非常相似的API,但是,该库是内部制作的,我们准备开始对其进行测试。

为了进行测试,我们希望用新库的jar替换Java程序中的jar。问题在于新库没有完全相同的名称空间,因此import语句将无法对齐。例如,

Java程序

import someLibrary.x.y.Foo;

public class Main {
    public static void main(String[] args){
        new Foo().bar();   
    }
}

新库具有相同的API,但名称空间不同

anotherLibrary.x.y.Foo;

问题:如何使用类加载器或其他工具运行Java程序,但替换依赖项并将导入语句重定向到另一个名称空间?

谢谢!

java api jar classloader
1个回答
0
投票

让我们看一下导入语句的工作方式:

首先,仅导入将导入类或接口。它从不导入包。特别是类似

导入java.util。*导入名为java.util的包中的所有类和接口。该软件包只是用于类和接口的容器,因此谈论“导入软件包”确实没有任何意义。程序包本身不是可以编译或运行的任何程序。

话虽这么说,谈论“重定向”没有任何意义,因为您将重定向到什么位置?如果要从“ packageA”导入类,则直接将其导入。

类似地,从packageA导入类可让您访问该类的方法。由于该类位于packageA中,因此尝试从packageB导入它没有任何意义。即使packageB具有相同名称的类,它们也是两个不同的类。实际上,这是Java程序包的主要原因:避免两个不同的程序员编写的类的名称冲突。

话虽这么说,您遇到了“重定向导入”要解决的问题?

© www.soinside.com 2019 - 2024. All rights reserved.