2010-08-19 93 views
1

我们有一个使用大量FOSS/COTS软件的Java产品。我们的一些“外部”使用相同的罐子产品,但是是不同的版本。例如,Ant 1.6.5和Ant 1.7.0;或多个版本的xerces。我担心的是,我们的应用程序的行为可能会发生变化或变得更糟,如果我们改变了类路径放在一起的顺序,那么史诗般的失败。我们使用vbs脚本为每个产品的类路径设置环境变量,然后使用引用这些环境变量的Ant xml文件。你如何处理多个jar版本的大量FOSS/COTS?

所以,几个问题:

  1. 如何管理同一个jar的多个版本,使用这么多不同的外部是什么时候?当然,我不能只找到所有独特的罐子,并把它们放在一个大班级路线上 - 或者我可以吗?
  2. 是否有更智能的方法将我们的构建依赖项(和类路径)放在一起?

一个积极的一步是,我打算使用通配符来抓取所有的罐子。但这真的只是我最关心的进口订单问题。

注意:不要拍摄信使。这个系统在几年前就已经实现,早在我到达这里之前。我只是清理人员。

回答

5

Maven。需要一段时间才能弄清楚并设置好它,但一旦它正常工作,它就很神奇。

http://maven.apache.org/download.html

+0

听起来像Maven是最好的解决方案。如果我们没有达到这个产品的寿命,我会马上进入。我不知道在这一点上我是否可以证明一个完整的开关。但是,也许我可以深入研究它,使其成为下一次的简历生成器;)谢谢! – Dave 2010-08-19 23:49:29

+0

开始将新东西融入到maven中,并且在5年后,当您的生命周期结束产品仍在使用时,您将能够很快地将其转换:) – bwawok 2010-08-20 03:35:10

1

您可以添加Ivy到Ant构建中明确版本的依赖。当谈到构建类路径时,我建议你努力寻找一种你没有同一个库的多个版本的情况。我们有一些非常烦人的行为,IDE将使用传递依赖来构建类路径,但是我们按照字母顺序构建了我们的unix类路径,导致Saxon/Xalan JavaMail/Genronimo-JavaMail之一被加载,具体取决于您运行代码的位置。

正如在其他答复中提到,如果你有时间重新工作,你的编译系统,你应该看看行家。

我很喜欢这个talk由约翰·智能上维护您的构建环境

2

如果你把所有的罐子在同一个类加载器,那么你可以使用Maven来确定的依赖集。这将选择该组依赖项所需的每个库的最新版本。 (例如,Ant 1.7.0将被选中,而不是1.6.5)。这种方案运行良好 - 除非库不与早期版本向后兼容。因此,在更改依赖关系时测试应用程序的相关功能/功能是个好主意。

的替代,这是唯一可行的,如果文库可以分成接口和实现,是加载在一个共同的类加载器的接口,并在自定义类装载器的实现+依赖性。通过给它自己的类加载器来隔离每个依赖。这基本上是OSGi所做的。

+0

您可以将我指向TFM,以解释如何使用Maven来确定依赖关系集?对不起,我只是一个完整的Maven noob。 – Dave 2010-08-19 16:57:54

+0

maven自动执行此操作,它被称为依赖性解析。有各种各样的插件可以将你的代码与依赖包打包在一起,比如war插件。您可以使用依赖项插件显式复制依赖项。 http://maven.apache.org/plugins/maven-dependency-plugin/ – mdma 2010-08-19 19:32:58

+0

非常棒的信息。谢谢一堆! – Dave 2010-08-19 23:44:03

0

这是OSGi设计要解决的问题:在应用程序中拥有多个独立版本的相同罐子。

+0

这一句话可能是完全正确的。尽管如此,它并不能帮助初学者在那个领域得出一个想法,从哪个方向开始。我的意思是,你不希望原始的海报开始阅读所有的OSGI规格,对吧?所以也许你有更详细的指针? – Bananeweizen 2011-12-01 14:52:40

1

我不确定使用Maven或Ivy的建议能否解决真正的问题。他们可能会清理依赖声明,但他们不会做任何有关冲突的事情。如果您需要发货两个不同版本的相同库(因为如果库不向后兼容,则使用最新版本将不一定),您可以使用jarjar重新打包具有不同软件包名称的库,以便两个版本都可以必要时加载。

+0

是否会重新打包jar这样的破解许可协议?我不想让我们后面的模糊。也必须向法律部门解释。 – Dave 2010-08-19 18:39:43

+0

@Dopyii我不知道商业JAR,但你不应该修改Apache/BSD许可的开源的任何问题。 – 2010-08-19 20:55:21

+0

感谢您的信息丹! – Dave 2010-08-19 23:44:24