如何在部署时将jar文件包含在不同的包中

时间:2012-10-10 19:49:25

标签: java eclipse java-ee ant build

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

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

但是,我想只使用2.0作为应用程序内部的特定包,其余的应用程序使用1.0。如何构建应用程序以仅使用2.0版本,例如com.naurus.eventhandler.risk等软件包名称?我再次使用Ant脚本,但是如果有更简单的方法来做这种事我愿意尝试。谢谢!

3 个答案:

答案 0 :(得分:2)

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

但是我想这两个罐子里面大多数都是相同的类/方法?有许多方法可以使用相同类的不同版本:

  • 使用不同的ClassLoader个实例。我不认为它是“容易”的,远非它意味着打开一堆令人讨厌的错误的大门。 (可以使用像OSGi这样的工具帮助)
  • 在两个进程中拆分应用程序,这些进程在同一个Ant目标中启动,并使用任何平均值(CORBA,RMI,REST等)进行通信。

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

答案 1 :(得分:0)

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

IMO,最好是:

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

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

答案 2 :(得分:0)

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

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

虽然老实说它似乎有点复杂,但这是你的要求。