我正在开发一个基于Spring(MVC),Hibernate,PostgreSQL(使用Maven)的Web项目。现在我正在尝试让一个新客户在应用程序的几个部分中需要一些差异。我已经阅读了Sonatype的Maven权威指南来了解多模块Maven项目,但我最重要的问题之一还没有得到解答:如何在几个模块/项目上共享通用视图组件并根据它们进行集成对我想建立的客户?服务层非常清楚,但我无法弄清楚如何共享jsp / jspf文件,并在构建特定的客户模块时将它们与自定义文件合并(然后依赖于通用模块)。
您如何避免仅仅克隆常用代码?
答案 0 :(得分:4)
在构建特定的客户模块时,我无法弄清楚如何共享jsp / jspf文件并将它们与自定义文件合并(后者取决于通用模块)。
这似乎是Overlays的一个很好的用例。
答案 1 :(得分:3)
您可以将常用组件放入库项目中,并根据需要使用dependency:unpack或dependency:unpack-dependencies
解压缩它们E.g。你的项目布局就像那样:
root
|____ common-lib (jar, contains common java code)
|____ common-gui (jar, contains only non-java stuff like js, jsp, css etc)
|____ client1 (war)
|____ client2 (war)
client1和client2都会对common-lib有一个常规compile
依赖关系,但对common-gui只有一个provided
依赖关系(如果你使用dependency:unpack
则不需要完全是项目依赖)
现在,您可以将这样的代码添加到客户端项目中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-common-gui-elements</id>
<phase>prepare-package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.yourcompany</groupId>
<artifactId>common-gui</artifactId>
<version>${project.version}</version>
<type>jar</type>
<!-- war assembly directory -->
<outputDirectory>
${project.build.directory}/${project.build.finalName}
</outputDirectory>
<includes>**/*.jsp,**/*.css,**/*.js</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
通过这种方式,您可以重新使用您的组件,但您可以随时自行选择将哪些组件分发给哪个客户端。