2009-10-25 30 views
8

que estoy trabajando actualmente en dos proyectos a la vez:Integración de proyectos Maven y no maven

  • Mi proyecto principal (construidas con Maven)
  • Un aumento de un proyecto de código abierto, que mi principal proyecto depende en (no construir con Maven)

¿Cómo puedo configurar experto para utilizar el proyecto de software libre como una dependencia con la menor cantidad de fricción, dado que a menudo estoy desarrollando los dos en tándem?

Respuesta

10

puedo pensar en varias soluciones:

  1. Mavenize el proyecto OSS existente. Esta es, por supuesto, la opción "ideal", pero a menudo no es factible (incluso si introduce el nuevo sistema de compilación en paralelo al existente). El proyecto probablemente tiene una estructura de proyecto existente que difiere del diseño estándar de Maven. Es posible que los desarrolladores no deseen cambiar el diseño existente y el script de compilación, pero adaptar una compilación Maven para usar un diseño no estándar puede ser doloroso. En ambos casos, estás jodido.

  2. Envuelva la construcción Ant existente con Maven. Esto puede ser útil si desea incluir la compilación del proyecto OSS en el ciclo de vida de su proyecto y tener ambas compiladas en un solo paso. Puede consultar this answer on SO para obtener detalles sobre cómo hacer esto.

  3. Uso Apache Ivy o Maven Ant Task en el vigente construir para producir e instalar un artefacto Maven en su repositorio local. Utilice este artefacto como una dependencia regular en su proyecto Maven (excepto que tendrá que declarar sus dependencias transitivas manualmente). Este es quizás el enfoque más rápido y menos intrusivo si la construcción de ambos proyectos por separado no es un problema.

Parece que elige la opción 3. Creo que es una buena opción para una victoria rápida.

+0

+1 para ampliar mi conocimiento :) – cetnar

0

Creo que probablemente necesite morder la bala y configurar un POM para su árbol de proyectos OSS. Esta es la parte dolorosa (ya que necesitaría buscar los detalles de la especificación de rutas de recursos para varios plugins involucrados dependiendo del tipo de aplicación OSS (es decir, web, etc.)). La buena noticia es que este es un esfuerzo de una sola vez.

Una vez hecho esto, su proyecto principal puede referirse al proyecto OSS (envuelto) como una dependencia. Aquí se aplicaría una estructura de proyectos múltiples (estándar).

1

La solución que he usado son las tareas de maven-ant (http://maven.apache.org/ant-tasks/).

Agregué una tarea de instalación en el archivo build.xml, que instala el .jar compilado en el repositorio local.

Si bien agregar un pom completo al proyecto sería definitivamente el mejor enfoque, esta es una gran parte del trabajo, e inflige maven en el proyecto (donde los otros usuarios preferirían no usarlo).

0

Si el proyecto OSS tiene dependencias: cree un POM con esas dependencias (su proyecto las usará como dependencias transitivas) e instale ese artefacto y pom en el repositorio local. Si el proyecto OSS no tiene otras dependencias es incluso más simple: el POM se genera automáticamente durante la instalación.

Para ambos casos, use maven-install-plugin.

mvn install:install-file -Dfile=your-artifact-1.0.jar \ 
        [-DpomFile=your-pom.xml] \ 
        [-Dsources=src.jar] \ 
        [-Djavadoc=apidocs.jar] \ 
        [-DgroupId=org.some.group] \ 
        [-DartifactId=your-artifact] \ 
        [-Dversion=1.0] \ 
        [-Dpackaging=jar] \ 
        [-Dclassifier=sources] \ 
        [-DgeneratePom=true] \ 
        [-DcreateChecksum=true] 
Cuestiones relacionadas