将同一个包中的类构建到单独的jar中

Tom*_*ker 7 java build

我有一个服务器应用程序和两个基于Swing的客户端应用程序.我们正在eclipse中开发它们,每个都有一个单独的项目.

许多课程都是共享的.例如,该my.server包具有服务器和客户端的一些类,而其他类仅用于服务器.虽然我更喜欢将它们放在同一个包中,因为它们密切相关,而且其中一些依赖于包的可见性,我不想分发应用程序不需要的类,因为它不仅会使文件大小膨胀,而且这将是一个安全风险.

目前,每个服务器和客户端都有相同的罐子,这是一团糟.理想情况下,我想基于依赖关系自动创建jar,如下所示.

服务器:

  • server.jar:仅供Server使用的类
  • server-client1-common.jar:服务器和客户端1共享的类
  • server-client2-common.jar:服务器和客户端2共享的类

客户1:

  • client1.jar:仅客户端1使用的类
  • server-client1-common.jar:服务器和客户端1共享的类
  • client-common.jar:客户端1和客户端2共享的类,但不是服务器

客户2:

  • client2.jar:仅客户端2使用的类
  • server-client2-common.jar:服务器和客户端2共享的类
  • client-common.jar:客户端1和客户端2共享的类,但不是服务器

我意识到你可以使用ant手动完成这项工作,但这将是一次维护灾难.是否有一个工具可以自动处理这种依赖?

Ali*_*ian 1

关于构建应用程序的最佳实践之一是每个项目都有一个 jar。
例如,Maven 使用此作为默认值。你可以欺骗它做其他事情,但最好加入他们而不是“战斗”他们。

http://maven.apache.org/guides/mini/guide-using-one-source-directory.html
http://www.sonatype.com/people/2010/01/how-to-create-two-jars -来自一个项目和为什么你不应该/

因此,在您的情况下,您应该创建 6 个项目:Server、Client1、Client2、ServerClient1Common、ServerClient2Common、ClientCommon

为了选择所需的类,我认为没有工具,也许您应该更好地了解常用功能是什么。创建 Common 项目,并将它们添加到构建路径 - 依赖项中。然后开始将您的类移至 Common 项目中,将它们保留在同一个包中。

例如,创建ServerClient1Common项目。
对于 Client1,转到配置构建路径 -> 项目。添加ServerClient1Common。删除对服务器项目的所有引用。
对于服务器,请转到配置构建路径 -> 项目。添加ServerClient1Common。删除对 Client1 项目的所有引用。

您现在应该有很多缺失的类/导入。尝试一一解决。

最后,您应该能够编译 3 个项目并获得您提到的 jar。

PS:其他策略(例如具有不同构建目标的一个超级项目,或具有缠绕的 ant/maven 构建器的 3 个项目)则更加混乱。也许有一个例外 - 另一种拆分类的方法,但我不知道它是否适用于您:client1.jar、client1-interface.jar、client2.jar、client2-interface.jar、server.jar、server-接口.jar。这样您就可以使用 3 个项目,每个项目都有两个目标 jar。要运行 client2.jar,您将需要 server-interface.jar