gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:30:08 25 4
gpt4 key购买 nike

我上周发布了一个关于如何构建依赖模块的问题,结果是建议我使用像 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

模块 3

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

正如您可能看到的那样,以上内容将共同构成一个应用程序。我想做的是最终为每个模块制作一个 Artifact 。由于文件类型(jsp、css、java)的混合,我不太确定什么是合适的 Artifact 。下图显示了我想要结束的 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 文件的根目录下

存储库中每个模块的 Artifact 的最佳存储方式是什么?

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

我如何使用 Maven 实现它

  • 我一直在研究 Maven,发现可能有一个具有以下结构的多模块项目

    MyApp.pom(父项目) 通用模块.pom 客户.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.xml 中建立对 mod-1 和 mod-2 的依赖。这将导致将它们打包到一个 war 文件中,其中包含单独的 mod-1-VERSION.jar 等。这个 Artifact (war 文件)可以部署到适当的存储库,如果需要,它本身可以用作依赖项。

可以看看here举个例子。

关于java - Maven - 从多个模块构建一个基于 java/servlet 的 war 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9584706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com