2010-09-22 19 views
5

Estoy desarrollando un proyecto web basado en Spring (MVC), Hibernate, PostgreSQL (usando Maven). Ahora estoy tratando de obtener un nuevo cliente que requiera algunas diferencias en varias partes de la aplicación. He leído la Guía definitiva de Maven de Sonatype para tener una idea de los proyectos Maven de varios módulos, pero una de mis preguntas más importantes no se ha respondido allí: ¿cómo puedo compartir componentes de vista comunes en varios módulos/proyectos e integrarlos dependiendo en el cliente que quiero construir? Service-Layer es bastante claro, pero no puedo entender cómo compartir archivos jsp/jspf y fusionarlos con los archivos personalizados al compilar el módulo específico del cliente (que luego depende del módulo común).Desarrollo de proyectos de aplicación web Java para dos clientes

¿Cómo tratarías de evitar simplemente clonando el código comúnmente usado?

+0

¡Gracias por sus respuestas! Especialmente el Plugin de Dependencia de Maven parece ser útil. He encontrado otra solución usando el complemento Maven WAR y sus superposiciones. A continuación, puede agregar una dependencia a otra guerra y reutilizar partes de esa (guerra común, por ejemplo). El complemento de recursos remotos parece estar hecho principalmente para la distribución de licencias, pero también puede hacer el trabajo. – velaia

+0

debe agregar dichos comentarios a las respuestas a las que se refiere o editar su pregunta original. Además: la versión de StackOverflow de decir "Gracias por tus respuestas" hace clic en las flechas hacia arriba, aunque también se agradecen las palabras verbales :-) –

Respuesta

3

Usted puede poner los componentes comunes en un proyecto de biblioteca y desempaquetar los archivos según sea necesario con dependency:unpack o dependency:unpack-dependencies

P. ej que proyectar el diseño sería así:

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) 

cliente1 y client2 tendrían cada uno un compile dependencia regular a common-lib, pero sólo una dependencia común a provided-GUI (si se utiliza dependency:unpack no tiene por qué ser una dependencia del proyecto en absoluto)

Ahora deberá añadir código como este para sus proyectos de clientes:

<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> 

de esta manera se puede volver a usar sus componentes, pero siempre se puede elegir usted mismo los componentes que se distribuya a qué cliente.

+0

Esta es otra forma y también puede ser útil para +1. Me recuerda a [Cómo compartir recursos entre proyectos en Maven] (http://www.sonatype.com/people/2008/04/how-to-share-resources-across-projects-in-maven/). –

4

No puedo encontrar la forma de compartir archivos jsp/jspf y combinarlos con los archivos personalizados al compilar el módulo específico del cliente (que luego depende del módulo común).

Parece un buen caso de uso para Overlays.

+0

Acepto (+1) ... –

Cuestiones relacionadas