Maven – 从多个模块构建一个基于java / servlet的war文件

我上周在如何构建依赖模块时发布了一个问题,结果是建议我使用像Maven或Ivy这样的构建工具.我决定使用Maven来尝试实现我想做的事情.我的项目基本上构建了一个部署到Tomcat的war文件.模块本身是最终war文件的一部分.这是模块的示例结构

第1单元

customerModule
    |-webapp
        |-jsp
            |-customer
                |-findCustomer.jsp
                |-addNewCustomer.jsp
                |-deleteCustomer.jsp
    |-src
        |-com
            |-mycompany
                |-customer
                    |-FindCustomerAction.java
                    |-AddCustomerAction.java
                    |-DeleteCustomer.java

单词数

productModule
    |-webapp
        |-jsp
            |-product
                |-productCustomer.jsp
                |-addNewProduct.jsp
                |-deleteProduct.jsp
    |-src
        |-com
            |-mycompany
                |-product               
                    |-FindProductAction.java
                    |-AddProductAction.java
                    |-DeleteProduct.java            

单词数

commonModule
    |-webapp
        |-css
            |-style.css
        |-jsp
            |-templates
                |-coreTemplate.jsp
    |-src
        com
            |-mycomany
                |-common
                    |-Logger.java
                    |-Access.java
    |-META-INF
        |-MANIFEST.MF
        |-context.xml
    |-WEB-INF
        |-lib
            |-oraclejdbc.lib
            |-log4j.lib
            |-common.lib
        |-struts-config.xml
        |-tiles-def.xml
        |-web.xml

正如您可能看到的,上述内容将共同形成一个应用程序.我想做的是为每个模块最终得到一个工件.由于文件类型(jsp,css,java)的混合,我不太确定什么是合适的工件.下图显示了我想最终得到的war文件的结构.

MyApp.war
    |-webapp
        |-css
            |-style.css
        |-jsp
            |-customer
                |-findCustomer.jsp
                |-addNewCustomer.jsp
                |-deleteCustomer.jsp
            |-product
                |-productCustomer.jsp
                |-addNewProduct.jsp
                |-deleteProduct.jsp     
            |-templates
                |-coreTemplate.jsp
    |-META-INF
        |-MANIFEST.MF
        |-context.xml
    |-WEB-INF
        |-lib
            |-oraclejdbc.lib
            |-log4j.lib
            |-common.lib
            |-customerModule.jar
            |-productModule.jar
        |-classes
            |-com
                |-mycomany
                    |-common
                        |-Logger.class
                        |-Access.class
        |-struts-config.xml
        |-tiles-def.xml
        |-web.xml   

几个笔记
     – commonModule中的java文件是在WEB-INF / classes中构建的
     – customerModule的java文件最终作为WEB-INF / lib中的jar文件
     – productModule的java文件最终作为WEB-INF / lib中的jar文件
     – 所有jsps,css最终都在war文件的根目录中

我应该为存储库中的每个模块存储工件的最佳方法是什么?

>我可以使用jar文件,但这不能保存html类型文件(jsp,css,js等)
>每个模块(commonModule除外)都将包含一个jar文件的jsp,css文件.我正在考虑将构建的工件存储为zip文件,并在构建MyApp.war以构建war文件时将其解压缩?
>我可以将每个模块的工件存储为war文件,即使只有一个有web.xml文件吗?

我如何使用Maven实现这一点

>我一直在调查Maven,发现可能有一个具有以下结构的多模块项目

MyApp.pom(父项目)
    commonModule.pom
    customer.pom
    product.pom
>如果我压缩存储库中的模块,我将如何从父项目中引用它们并解压缩它们以构建最终的war文件?
>如果构建了任何子项目,是否可以自动触发父项目的构建?
>我还没弄明白如何维护每个子项目的版本.如果我构建客户项目,那么父项目如何知道存储库中有更新版本的customer.zip(或.jar)?
>假设存储库当前包含以下内容

| -productModule.v.0.1.zip

| -customerModule.v.0.1.zip

| -commonModule.v.0.1.zip

如果我重建,customerModule然后重建war文件购买构建父项目,maven是否重建存储库中的所有其他模块,即使它们没有更改?这究竟是如何工作的?

是否有一个示例项目可以演示如何实现上述目标?显示上述示例的任何链接或资源都非常有用.

最佳答案
首先你的结构看起来不对,导致war项目的默认文件夹布局如下:

  +-- pom.xml (war packaging)
  +-- src/main/java (java Sources)
  +-- src/main/webapp (jsp pages etc.)
  +-- src/main/resources (language bundles etc.)

此外,如果您希望最终将所有模块放入同一个war文件中,但您希望将这些模块分开.最好的方法是创建一个多模块构建,如下所示:

  root
  +-- pom.xml (parent of all)
  +-- mod-war (incl. pom.xml)
  +-- mod-1 (incl. pom.xml)
  +-- mod-2 (incl. pom.xml)

并在mod-war pom中对mod-1和mod-2进行依赖.这将导致将它们打包到单个war文件中,该文件包含单独的mod-1-VERSION.jar等.此工件(war文件)可以部署到适当的存储库,如果需要,它本身可以用作依赖项.

你可以看看here作为例子.

转载注明原文:Maven – 从多个模块构建一个基于java / servlet的war文件 - 代码日志