【发布时间】:2012-03-23 23:46:48
【问题描述】:
我上周发布了一个关于如何构建依赖模块的问题,结果是建议我使用 Maven 或 Ivy 等构建工具。我决定使用 Maven 来尝试实现我想做的事情。我的项目基本上构建了一个部署到 Tomcat 的 war 文件。模块本身是最终战争文件的一部分。这是模块的示例结构
模块 1
customerModule
|-webapp
|-jsp
|-customer
|-findCustomer.jsp
|-addNewCustomer.jsp
|-deleteCustomer.jsp
|-src
|-com
|-mycompany
|-customer
|-FindCustomerAction.java
|-AddCustomerAction.java
|-DeleteCustomer.java
模块2
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
您可能会看到,以上所有内容将共同构成一个应用程序。我想做的是最终为每个模块制作一个工件。由于文件类型(jsp、css、java)的混合,我不太确定什么是合适的工件。下图显示了我想要最终得到的战争文件的结构。
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 文件时提取它?
- 即使只有一个有 web.xml 文件,我是否可以将每个模块的工件存储为 war 文件?
我如何使用 Maven 实现这一点
-
我一直在研究 Maven,发现可能有一个具有以下结构的多模块项目
MyApp.pom(父项目) 通用模块.pom 客户.pom 产品.pom
如果我压缩了存储库中的模块,我将如何从父项目中引用它们并解压缩它们以构建最终的 war 文件?
- 如果构建了任何子项目,是否可以自动触发父项目的构建?
- 我还没有弄清楚如何维护每个子项目的版本。如果我构建客户项目,父项目如何知道存储库中有更新版本的 customer.zip(或 .jar)?
-
假设存储库当前包含以下内容
|-productModule.v.0.1.zip|-customerModule.v.0.1.zip|-commonModule.v.0.1.zip
如果我重建customerModule然后重建war文件购买构建父项目,maven是否会重建存储库中的所有其他模块,即使它们没有改变?这究竟是如何工作的?
是否有任何地方的示例项目可以演示如何实现上述目标?任何显示上述示例的链接或资源都将非常有用。
【问题讨论】: