在多个项目中共享JAR的最佳方式是什么?

时间:2009-06-12 20:12:19

标签: java eclipse jar include

当您有多个项目都使用同一组JAR库时,为每个项目反复包含相同的JAR是很繁琐的。如果我正在处理20个不同的项目,我宁愿没有20个相同的JAR文件集。让所有这些项目(以及新项目)引用同一组JAR的最佳方法是什么?

我有一些想法,但每个都有一些缺点:

  • 将所有JAR放在一个文件夹中,让每个项目都在该文件夹中查找。
  • 使用Eclipse创建“用户库”并让每个项目引用该用户库。
  • 创建一个引用每个JAR的“库”项目,并让每个项目引用该库项目。

7 个答案:

答案 0 :(得分:22)

答案 1 :(得分:18)

使用MavenIvy来处理这些共享jar。如果您对过多地更改项目持谨慎态度,可以使用Ivy为您管理额外的类路径。


两者都有很好的Eclipse插件:

m2eclipse

Maven classpath container http://img229.imageshack.us/img229/4848/mavendependencies.png

IvyDE

IvyDE classpath container http://img76.imageshack.us/img76/3180/cpnode.jpg

我用过的效果很好。

您会注意到它们都引用工作区外的 罐子,因此删除了复制。


更新(由评论提示):

我推荐这种方法的原因是我坚信声明依赖关系更简单,更清晰,而不是手动包含它们。与此相关的一次性成本很小 - 常春藤比Maven小 - 但从长远来看它确实有回报。

另一个更小的好处是处理传递和冲突的依赖关系。很容易忘记为什么你需要在类路径中使用commons-logging-1.1.jar以及是否需要升级到1.1.1。而且,引入例如 Hibernate + Annotation + Spring组合所需的所有依赖项也没有意义。专注于编程,而不是建设。

答案 2 :(得分:1)

这取决于您的需求,但有几个可行的选择。我的工作使用外部文件夹,所有项目都引用该文件夹,这使得生活更容易在eclipse之外运行构建。只要你不介意轻微的日食依赖性,用户库就是一种稍微更好的做事方式。我没有看到它自己的图书馆项目有很多好处,但是如果你有一些所有其他项目已经加载的通用'util'类型项目,你可以把所有外部jar放在那个项目中。

答案 3 :(得分:1)

一种方法是将所有jar文件放在机器上的一个位置,在eclipse ide中,定义一个环境变量,比如指向该目录的LIB_LOCATION,让项目使用相对于该变量的jar。这样,只要您正确定义了变量,您就可以轻松使用,无需多个罐子,可以跨机器移植。我一直在为一组体面的大小项目尝试maven,似乎我必须至少和以前一样努力。插件中的错误和有线行为,m2eclipse和q4eclipse。

答案 4 :(得分:0)

您可以编辑“已安装的JRE”以包含JAR文件(“添加外部JAR”),将文件添加到jdk \ jre \ lib \ ext \目录或指定包含其路径的CLASSPATH环境变量。 / p>

答案 5 :(得分:0)

我推荐“图书馆”项目方法。

但更好的是 - 每个外部jar都有一个单独的lib项目 - 这使您可以跟踪第三方jar之间的deps,并了解在升级依赖项时需要更改的内容。

确保您签入这些项目,以便所有用户都使用相同版本的第三方库,因此您可以轻松地重新生成软件版本(在版本控制中使用标签/标签来​​分组哪些项目的版本一起)

答案 6 :(得分:0)

我们已经决定了一种更繁琐的方法,但它允许我们在内部拥有一切,但可能只适用于一小部分开发人员。

每组jar文件都设置为一个Eclipse项目,该项目在jar集之后适当地命名,添加到构建路径中,源jars和javadoc jar正确设置在构建路径中的每个jar上,然后每个项目都包含这些库该项目所需的项目。然后将生成的多项目工作空间导出为ProjectSet.psf文件,然后可以在原始Eclipse中读入该文件,从而再次引入整个工作空间。然后我们在CVS中拥有所有上述项目,包括jar文件。

这对我们来说非常好。

如果您在一个更大的组织中,Maven中的依赖项处理可能对您有用。您应该明确拥有本地文件缓存,这样如果您的互联网连接丢失,整个世界都不会停止。

另请注意,新的Eclipse 3.5出现在这个sommer中,将有一个“Create Runnable Jar”,可以在生成的runnable jar旁边输出所需的jar,并在Manifest中正确设置Class-PAth行。我希望节省大量时间 - 检查一下。