将项目打包成JAR的最佳实践(及其影响)是什么?

时间:2010-03-23 11:39:23

标签: java swing jar

决定如何为项目定义JAR集合(例如Swing GUI)的最佳实践是什么?有许多可能的分组:

  • 每层JAR(演示文稿,业务,数据)
  • JAR per(重要?)GUI面板。对于重要的系统,这导致大量的JAR,但JAR是(应该)更可重用 - 细粒度的粒度
  • 每个“项目”的JAR(在IDE项目的意义上); “common.jar”,“resources.jar”,“gui.jar”等

    我是一位经验丰富的开发人员;我知道创建JAR的机制,我只是在寻求最佳实践的智慧。

    就我个人而言,我喜欢每个组件(例如一个小组)的JAR 的想法,因为我对封装非常热衷,并且在项目中重复使用的圣杯。但是,我担心的是,在实际的性能级别上,JVM会在几十甚至几百个小型JAR上加载类加载。每个JAR都包含; GUI面板代码,必要的资源(即不集中),因此每个面板可以独立存在。

    当我说“再利用的圣杯”时,我更多地说这是因为它展示了一种干净的解耦,封装的设计,而不是一定期望它在其他地方重复使用。我认为自己是“通常聪明”的人;我认为在我的职业生涯中我必须处理的交织在一起的废话的速度让我减慢了10到100倍。干净利落的设计使我能够一次处理一个概念,一层,一层。

    有没有人有智慧分享?

  • 4 个答案:

    答案 0 :(得分:5)

    我建议尽量减少JAR。

    它背后的逻辑,磁盘存储是可用的最便宜的商品,但追踪复杂依赖的时间花费是无价的。

    因此出现了.war文件,其中Web应用程序的所有依赖项都放在一个文件中。

    顺便说一下,Eclipse有一个JAR导出器插件,它将所有依赖的jar放入一个超级jar并公开入门级main方法,这样你就可以用java -jar file.jar命令启动你的应用程序。虽然生成的jar可能很大,但是反面并没有为你的应用维护非常复杂的类路径。

    所以,在你的情况下,我会在每个项目中使用一个jar。如果您确定确实需要在另一个项目中重用某些代码,只需将其重构到基础项目中,并使其成为现有项目和另一个项目的依赖项。

    答案 1 :(得分:2)

    您实际上可以使用这两种方法。例如,Spring提供了一个大型的整体jar文件,其中包含最常见的功能。如果您需要,您也可以下载独立的jar文件。然后由用户选择最佳选择。大jar文件更易于部署,但它们更难升级。此外,您可能需要添加一个大罐子,而您只需要一个简单的类。我发现用小jar文件更容易发现依赖关系。我也知道更新/升级更容易。

    答案 2 :(得分:1)

    Java在类层提供封装和重用 - jar文件格式并不真正提供它。除非你认为很多人会下载它,否则我认为将一个重要的组件放在自己的jar中没有多大优势。

    答案 3 :(得分:0)

    我在某个地方读过(当我发现这个时我试图找到它)​​每层的项目是最好的。这就是我一直在做的事情。 Struts,Spring MVC,Swing,一层中的任何东西,另一层中的EJB,另一层中的业务服务以及另一层中的DAO。我将所有DTO放在它自己的项目中,即使它们不代表一个层,而是通过这些层。 我记得读到的主要好处是能够分别对每个罐子进行版本化。 哦,BTW,每层实际上有两个罐子,一个用于上面层使用的接口,另一个用于实现。