1

我有一个 ant 脚本,用于构建 J2EE 应用程序和创建 jar 文件。问题如下:运行应用程序需要两个 jar 文件。

commons-math-2.0.jar
commons-math-1.0.jar

但是,我只想将 2.0 用于应用程序内的特定包,而应用程序的其余部分使用 1.0。如何构建应用程序以仅使用 2.0 版本,例如使用 com.naurus.eventhandler.risk 之类的包名称?同样,我使用的是 Ant 脚本,但如果有更简单的方法来做这种事情,我愿意尝试。谢谢!

4

3 回答 3

2

如果两个 jar 包含不同的类/包,那么将它们全部放在应用程序类路径中应该没有问题。然后,不使用另一个包中的一个 jar 中的类是一个纪律问题。

但是我猜这两个罐子包含大部分相同的类/方法?有很多方法可以使用相同类的不同版本:

  • 使用不同的ClassLoader实例。我不会将其称为“简单”,远非意味着为一堆讨厌的错误敞开大门。(可以帮助使用像 OSGi 这样的工具)
  • 将应用程序拆分为两个进程,这些进程在同一个 Ant 目标中启动并使用任何方式(CORBA、RMI、REST 等)进行通信。

不过,我不建议使用任何这些方法。让所有包都使用相同的版本可能会更简单。这样做有什么特别的困难吗?

于 2012-10-10T20:00:47.757 回答
0

这将是有问题的,因为当您部署 J2EE 应用程序时,这两个 JAR 文件将最终位于相同的类路径中。您可以使用OSGI bundles实现您尝试尝试的内容,这允许每个包具有单独的依赖项。但是,这是对您的应用程序进行的相对较大的重构。

IMO,最好是:

a) 从 2.0 复制您需要的功能(如果数量很少且许可证允许,例如,打包单个类)。

或者

b) 花时间将整个应用程序升级到 2.0

于 2012-10-10T19:57:20.097 回答
0

您可以使用 jar 中的清单来定义类路径。

http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

虽然老实说这似乎有点令人费解,但这是您的要求。

于 2012-10-10T20:05:34.327 回答