2010-09-22 51 views
5

我正在开发基于Spring(MVC),Hibernate,PostgreSQL(使用Maven)的Web项目。现在我试图让一位新客户在应用程序的多个部分中需要一些差异。我已经阅读了Sonatype的Maven权威指南,以获得关于多模块Maven项目的感受,但是我的一个最重要的问题还没有在那里得到回答:我如何在几个模块/项目上共享公共视图组件并将它们集成在一起在我想要建立的客户上?服务层非常清晰,但我无法弄清楚在构建特定客户模块(然后取决于公共模块)时如何共享jsp/jspf文件并将其与自定义文件合并。为两个客户端开发Java Web应用程序项目

你会如何避免只是简单地克隆常用的代码?

+0

感谢您的回答!特别是Maven的依赖插件似乎很有用。我已经使用Maven WAR插件和它的覆盖图来介绍另一种解决方案。然后你可以添加对另一场战争的依赖,并重新使用那些部分(例如普通战争)。远程资源插件似乎主要用于许可证分发,但也可能完成这项工作。 – velaia 2010-09-22 07:46:04

+0

您应该将这些注释添加到您所指的答案中或编辑您的原始问题。另外:StackOverflow版本的“感谢您的答案”是点击向上箭头,althogh口头表示感谢也感谢:-) – 2010-09-22 07:55:34

回答

3

您可以把常用的部件库中的项目和使用dependency:unpackdependency:unpack-dependencies

如需要解压它们你的项目布局将是这样的:

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) 

客户端1和客户端2将各有一个普通compile依赖于共同-lib下,但只有一个provided依赖于通用的GUI(如果你使用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> 

这样,你可以重复使用您的组件,但你总是可以自己选择你发布的组件客户。

+0

这是另一种方式,也可以是有用的,所以+1。它让我想起了[如何在Maven中跨项目共享资源](http://www.sonatype.com/people/2008/04/how-to-share-resources-across-projects-in-maven/)。 – 2010-09-22 13:32:12

4

我无法弄清楚在构建特定的客户模块(这取决于公共模块)时如何共享jsp/jspf文件并将它们与自定义文件合并。

这看起来像是一个很好的用例Overlays

+0

我同意(+1)... – 2010-09-22 09:38:39