【问题标题】:How to structure different common code shared with different projects?如何构建不同项目共享的不同公共代码?
【发布时间】:2014-04-21 23:53:42
【问题描述】:

我有一个 webserver 项目,它与 soap webservices 一起工作并将数据保存到 db。

现在我想编写一些导入器类来处理定期构建某种数据库缓存。这些导入器类应该重用大量的网络服务器项目(尤其是域 leyer、域 POJO、数据库服务、配置等)。导入器稍后将在与网络服务器不同的机器上运行,因此是独立的。

如何构建 maven/eclipse 项目,以便我可以将这两个项目分开,但重用大量通用代码?

我会将这两个类都放在同一个项目中吗?或者我会将通用代码移动到单个 jar 中,并使用此 jar 作为依赖项创建 1 个 webserver 和 1 个 importer 项目?

【问题讨论】:

    标签: java eclipse maven


    【解决方案1】:

    您的最后一段确实给出了合理的解决方案。

    如果导入器和 Web 应用程序是密切相关的,并且这些“公共类”的“可重用性”仅在这个项目中,你可以做一个像这样的多模块项目:

    foo // your project name
      + foo-main    // your reusable classes, you may split it into several modules if appropriate
      + foo-web       // have foo-main as dependency
      + foo-importer  // have foo-main as dependency
      + foo-parent    // my personal preference is to make parent project a module, not mandatory
    

    如果你的 importer 和你的 foo 项目无关,但你还是想复用,可以拆分出来

    foo // your project name
      + foo-main    // your reusable classes, you may split it into several modules if appropriate
      + foo-web       // have foo-main as dependency
      + foo-parent    // my personal preference is to make parent project a module, not mandatory
    
    bar-importer  // another project, having foo-main as dependency
    

    甚至将公共代码作为一个单独的项目

    app-common   // the common code in original foo-main, 
                 // maybe a multi-module project
    
    
    foo // your project name
      + foo-main    // foo-specific codes, have app-common as dependency
      + foo-web       // have foo-main as dependency
    
    bar-importer   // having app-common as dependency
    

    对于 Eclipse,应该没有什么可担心的。鉴于您使用的是最新的 Eclipse + M2E 插件(应该已经与最新的 Eclipse 捆绑在一起),如果您有正确的 POM,当您将项目导入 Eclipse 时(通过 Import -> Existing Maven Project),项目之间的关系应该已经创建.

    【讨论】:

    • 感谢您的详细回答。关于第一种方法的另一个问题:导入器将以某种方式相关,因为它必须将缓存的数据导入数据库,然后由主/Web应用程序使用。这就是为什么我想至少重用域类。无论如何,主应用程序不会对导入器 java 类进行任何引用。有了这个:您会选择第一种方法,将所有内容都放在一个多模块项目中吗?还是你会把进口商彻底淘汰?
    • 要考虑的主要事情是多模块项目将其模块的“开发生命周期”绑定在一起。如果你想独立发布项目,那么我会说第二种方法更好。
    • Pavel Horal 所说的也是我最关心的问题。 (这就是为什么我的“进口商和网络应用程序密切相关”的意思)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    相关资源
    最近更新 更多