¿Cómo ejecutar Maven desde otro directorio (sin cd para dir del proyecto)?


248

Suponiendo que mi proyecto maven esté ubicado /some/location/projecty mi ubicación actual es, /another/location/¿cómo puedo ejecutar maven build sin cambiar a la ubicación del proyecto cd /some/location/project?


44
@khmarbaise: estoy tratando de automatizar la compilación y las implementaciones usando algunos scripts de shell y no siempre es sencillo usar cd para cambiar el directorio.
Ali Shakiba

@khmarbaise: es posible que desee hacer referencia a múltiples archivos o carpetas en o cerca de un directorio, pero su pom y los archivos a los que se refiere están en otro.
jyoungdev

Respuestas:


432

Puede usar el parámetro -fy especificar la ruta a su archivo pom, p. Ej.mvn -f /path/to/pom.xml

Esto ejecuta maven "como si" estuviera en /path/toel directorio de trabajo.


39
No, -f inicia Maven con ese pom específico y, por definición, el directorio donde está el pom es el directorio de trabajo de Maven. Lo uso en mi servidor CI para construir módulos específicos en subdirectorios, y puedo asegurarle que funciona.
Dunni

15
Use un punto para las rutas relativas. por ejemplo./path/pom.xml
Snekse

3
Como dice Dunni, esto no funciona. El directorio actual es donde estás. Solo estás usando un pom en otro directorio. Maven no es compatible con esto.
niebla

1
java.lang.IllegalArgumentException: el parámetro 'directorio' no es un directorio
Damir Olejar

Funciona para la mayoría de mis proyectos. Desafortunadamente, algunos proyectos que usan el complemento exec no se pueden construir de esta manera porque el complemento no encuentra el ejecutable aunque el directorio de trabajo esté configurado.
user2043553

15

No creo que Maven lo respalde. Si está en Unix, y no quiere abandonar su directorio actual, puede usar un pequeño script de shell, una función de shell o simplemente un sub-shell:

user@host ~/project$ (cd ~/some/location; mvn install)
[ ... mvn build ... ]
user@host ~/project$

Como una función bash (que puede agregar a su ~ / .bashrc):

function mvn-there() {
  DIR="$1"
  shift
  (cd $DIR; mvn "$@")     
} 

user@host ~/project$ mvn-there ~/some/location install)
[ ... mvn build ... ]
user@host ~/project$

Me doy cuenta de que esto no responde la pregunta específica, pero puede proporcionarle lo que busca. No estoy familiarizado con el shell de Windows, aunque también debería poder encontrar una solución similar allí.

Saludos


44
Excelente. mvn -f param no funciona con proyectos de varios módulos que utilizan una ruta relativa para hacer referencia a los poms secundarios. Gracias, eso es lo que estaba buscando.
redochka

1
Esto funciona en Mac (y sé que funcionará en Linux). En Windows (o cualquier plataforma) debería poder guardar la ruta actual, cd a su proyecto, hacer mvn cosas allí y cd nuevamente en un script. El único problema sería si el guión se detuviera a la mitad.
Erk


0

Puedes probar esto:

pushd ../
maven install [...]
popd
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.