2011-03-09 72 views
0

我正在扩展现有的java应用程序,同时使用纯Java模块和战争。对于这场战争,我使用了maven-war-overlay方法,如果它们的命名相同,它会自动将我自己的扩展文件包含在现有文件中。扩展现有的java/maven项目的最佳方式

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

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

离开原始源代码的最佳方式是什么,但做出我需要的更改?

回答

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 Inheritance

+0

该项目使用春天,你可以p在我如何使用ioc功能的正确方向上使用我的软件?对于需要小修复的所有文件来说,这个过程将非常繁琐。我有权访问源代码,而不仅仅是jar,如果这改变了什么 - – chrismarx 2011-03-10 15:41:00

+0

@chrismarx在applicationContext.xml中很难获得一般的配方,但可能是这样的: <豆ID = “userOfWantToOvveride” 类= “my.package.UserOfWantToOverride”> <构造精氨酸REF = “wantToOverride”/> 另外,如果你正在谈论小修正(如错误修复),为什么不修复原始文件? – 2011-03-10 18:55:39

+0

是的一些变化是错误的,其他的是由于我为项目切换数据库这一事实,并且尽管他们已经努力实现这一点(例如使用hibernate),但仍然有一些地方需要修改。我认为我的策略是排除我正在修改的类,并插入我自己的。不像改变源代码那样糟糕(因为这会改变,你提到的一团糟),但不是那么优雅 – chrismarx 2011-03-10 19:37:19

相关问题