上周我发布了一个关于如何构建依赖模块的问题,结果是我建议使用像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
正如您可能看到的,上述内容将共同形成一个应用程序。我想做的是为每个模块最终得到一个工件。由于文件类型(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文件的根目录中
我应该为存储库中的每个模块存储工件的最佳方法是什么?
如何使用Maven实现此功能
我一直在调查Maven,发现可能有一个具有以下结构的多模块项目
MyApp.pom(父项目) commonModule.pom customer.pom product.pom
如果我压缩了存储库中的模块,我将如何从父项目中引用它们并解压缩它们以构建最终的war文件?
假设存储库当前包含以下内容
|-productModule.v.0.1.zip
|-customerModule.v.0.1.zip
|-commonModule.v.0.1.zip
如果我重建,clientModule然后重建war文件购买构建父项目,maven是否重建了存储库中的所有其他模块,即使它们没有更改?这究竟是如何运作的?
是否有任何示例项目可以演示如何实现上述目标?显示上述示例的任何链接或资源都非常有用。
答案 0 :(得分:1)
老实说,在你的情况下做的最好的事情就是制作一个包含每场战争的.ear文件。否则,如果你真的希望将所有3场战争中的资源整合到一场战争中,你应该手动合并它们。 Java EE没有任何关于合并这样的战争的规范,所以即使你设法用一些Maven插件/ workAround来做它也不会是kusher。
答案 1 :(得分:1)
首先,您的结构看起来不对,导致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文件)可以部署到适当的存储库,如果需要,它本身可以用作依赖项。 / p>
您可以查看here作为示例。