最好的方法是扩展现有的java / maven项目

时间:2011-03-09 22:06:38

标签: java inheritance maven

我正在扩展现有的Java应用程序,包括纯Java模块和战争。对于战争,我正在使用maven-war-overlay方法,如果命名相同,它会自动将现有文件扩展到现有文件中。

现在对于java模块,我想我可以单独扩展它,但最好的方法是什么?我创建了一个新的java模块项目,并将原始项目jar包含为依赖项。有没有办法在不创建子类的情况下更改该jar中的现有属性/方法?如果我是子类,现有的类将不知道它...

我可以从第一个项目中排除文件,但这会有点麻烦,有很多文件需要小的更改(例如,不同的hibernate注释)。

将原始源代码单独保留,但进行我需要的更改的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

从技术上讲,您可以打开原始JAR的内容,编译新的源代码并组装新的JAR,用新的源替换旧的源代码。但是,这也是非常糟糕的做法,而且非常容易出错。你冒着浪费大量时间并最终搞乱一个项目的风险。

最好修改原始项目的类以允许替换类的实现。在项目中拥有IOC容器可以简化此过程。你也可以在没有容器的情况下这样做:

class WantToOverride { ... }

class UserOfWantToOverride {
  WantToOverride wantToOverride;

  public void setWantToOverride(WantToOverride wantToOverride) {
     this.wantToOverride= wantToOverride;
  }
}

现在,在项目初始化期间,请调用

userOfWantToOverride.setWantToOverride(new OverridingClass(...))

,你的班级

class OverridingClass extends WantToOverride { ... }

您也可以继承Hibernate类,但需要仔细处理Hibernate Inheritance