我有点陷入困境,我正在寻找一些关于如何解决它的帮助。我有一些从 idls 创建的 jar 文件中导入各种类的源代码。现在我得到了这个 idl jar 的新版本,它具有不同的包结构,它破坏了我所有的旧导入语句。我无法修改导入语句,所以我想看看是否有办法解决这个问题。有任何想法吗?
基本上,我被要求让当前的源代码与新旧版本的 jar 一起工作,最好不要修改代码。我不认为这是可能的,但我希望我错了。
这是您可以做的一件事:重新创建所有旧类并使它们与新类匹配。例如,如果你有a.Foo
,现在是b.foo
,你可以有:
package a;
public class Foo {
b.Foo foo;
public void method() {
foo.method();
}
}
package b;
public class Foo {
public void method() {
// Your new code...
}
}
这有点痛苦,但恐怕这是向后兼容的代价。
如果您的类结构允许,另一种解决方案是有a.Foo
inherit b.foo
,因此您不必创建所有委托方法。但取决于您的项目,可能无法正常工作。
希望这可以帮助。
不,没有办法做到这一点。但是如果你想批量更改包名,你可以使用 linux 的命令 sed。
例如,如果您的旧包是 com.patito 并且您想将其更改为 org.duck 您可以执行以下操作:
sed 's/com.patito/org.duck/g' *.java
这完全取决于结构变化的严重程度。如果新的类(不同的功能)已经替换了旧的类但保持相同的名称,那你就完蛋了。如果新类只是具有新名称/pkgs,那么您可以为所有原始导入创建一个包装器。
例如,如果原始类是:
package my.package;
public class OldClassName{
public void getSomeData(){}
}
但是现在变成了:
package my.new.package;
public class NewClassName{
public void getSomeData(){}
}
您可以为原始类创建一个包装器:
package my.package;
import my.new.package;
public class OldClassName extends NewClassName{
}
注意事项:
如果你有很多类,你总是可以自己写一个小工具来为你生成包装器......
完成后,您应该能够将新的包装 jar 放在新的库旁边,并且一切正常。