2011-02-26 15 views
8

Tengo una dependencia que he instalado en el repositorio local de Maven y que se está utilizando localmente pero no está disponible en el servidor de implementación. Uso esa dependencia usando Class.forName(...), por lo que no habrá problemas si se omite desde classpath en el servidor de implementación.¿Cómo decirle a Maven que ignore una dependencia si no puede resolverla?

¿Hay alguna manera de decirle a Maven que ignore una dependencia si no puede resolverla?

que no parece que <scope> o <optional> puede resolver este problema, pero puede ser posible hacerlo con <profiles> si hay alguna manera de activar/desactivar un perfil basado en las dependencias de la disponibilidad.

+0

¿Has visto esta publicación? http://stackoverflow.com/questions/3720768/ignore-maven-dependency-during-specific-execution-phase – Stephan

+0

@Stephan Gracias, he encontrado perfiles maven más limpios para evitar esto en diferentes entornos. –

+0

Los perfiles funcionan muy bien para tener múltiples entornos de compilación separados. Usamos esto en el trabajo porque nuestro servidor de compilación aloja dependencias de 'sistema' en una ubicación diferente a la local. – jpaugh

Respuesta

0

asumiendo la dependencia falta es solamente importante en el medio ambiente local se puede utilizar una combinación de perfil y la activación a través de su .m2/settings.xml

Se quita la dependencia de sus dependencias generales y moverlo como una referencia dependencia en un perfil de su pom.xml (Perfil de nivel de proyecto) y active el perfil a través de su m2/settings.xml.

También puede eliminar completamente la dependencia de su pom.xml y mover la dependencia en un perfil que reside en su .m2/settings.xml (perfil de nivel de usuario)

ver la sección introduction to profiles

otra forma que se adapte a sus necesidades quizás mejor

la activación del perfil mencionado anteriormente basado en la presencia del archivo en .m2/repository/local/dependency/1.0.0-Snapshot/local.jar

<profiles> 
    <profile> 
    <activation> 
     <file> 
     <exists>/home/user/.m2/repository/local/dependency/1.0.0-Snapshot/local.jar</exists> 
     </file> 
    </activation> 
    ... 
    </profile> 
</profiles> 
+0

Sé cómo usar perfiles como puede ver en mi pregunta y mi comentario en mi pregunta. –

+0

Agregué la activación basada en archivos del perfil que debería ser de ayuda. – p1brunne

+0

No es una solución de sistema cruzado. Incluso he intentado esto con propiedades maven (antes de hacer esta pregunta) pero por alguna razón que no pude entender, no funcionó. –

4

Respuesta corta: no.

Respuesta larga: Una vez que se declara la dependencia, ya sea en una parte común o en un perfil activo, debe resolverse cuando Maven lo intente; de lo contrario, la construcción falla.

Si maven permitiera el comportamiento solicitado, la reproducibilidad de la compilación sufriría mucho.

Si oscuridad y irreproductibilidad no es un problema para usted, aquí es una pista de cómo hacerlo:

  • llamada hormiga externa de su pom.xml, utilizando Exec-maven-plugin o maven-antRun -plugin
  • en el código de hormigas, utilice artifact:dependencies de Tareas ant Maven
  • lo envuelve en trycatch bloque

de hormiga-contrib en cualquier caso, yo estoy totalmente en includin g tales cosas en maven build. Tenerlo como una funcionalidad separada, invocada a través de una hormiga desde la línea de comandos, a menudo puede ser suficiente.

Cuestiones relacionadas