处理jar包结构更改



我陷入了一点困境,我正在寻求一些关于如何解决它的帮助。我有一些源代码,可以从从从idls创建的jar文件中导入各种类。现在,我得到了这个idl jar的新版本,它有一个不同的包结构,打破了我所有的旧导入语句。我不能修改import语句,所以我想看看是否有办法解决这个问题。有什么想法吗?

基本上,我被要求让当前的源代码同时使用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继承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{
}

注意事项:

  1. 如果你上了很多课,这真是太痛苦了
  2. 你将被限制在非期末的课程中。如果任何原始导入都是最终类,那么你就完了,你能做的最好的事情就是构图(这意味着要做更多的工作)和大量的委托

如果你有很多类,你可以随时为自己编写一个小的实用程序来为你生成包装器。。。

完成后,您应该能够将新的包装器jar放在新的lib旁边,就可以了。

相关内容

  • 没有找到相关文章

最新更新