Como executar o Maven a partir de outro diretório (sem cd no diretório do projeto)?

248

Supondo que meu projeto maven esteja localizado /some/location/projecte que minha localização atual seja /another/location/como executar a construção do maven sem alterar a localização do projeto cd /some/location/project?

Ali Shakiba
fonte
4
@khmarbaise - Estou tentando automatizar a compilação e implantações usando alguns scripts de shell e não é fácil sempre usar o cd para alterar o diretório.
Ali Shakiba
@khmarbaise - você pode se referir a vários arquivos ou pastas em um diretório ou próximo a ele, mas seu pom e arquivos a que ele se refere estão em outro.
Jyoungdev 01/11

Respostas:

432

Você pode usar o parâmetro -fe especificar o caminho para o seu arquivo pom, por exemplomvn -f /path/to/pom.xml

Isso executa o maven "como se" estivesse no /path/todiretório de trabalho.

Dunni
fonte
39
Não, -f inicia o Maven com esse pom específico e, por definição, o diretório em que o pom está, é o diretório de trabalho do Maven. Eu uso isso no meu CI-Server para criar módulos específicos em subdiretórios e posso garantir que funciona.
dunni
15
Use um ponto para caminhos relativos. por exemplo./path/pom.xml
Snekse 6/13
3
Como diz dunni, isso não funciona. O diretório atual é onde você está. Você está apenas usando um pom em outro diretório. Maven não suporta isso.
Nevoeiro
1
java.lang.IllegalArgumentException: Parâmetro 'diretório' não é um diretório
Damir Olejar
Trabalha para a maioria dos meus projetos. Infelizmente, alguns projetos que usam o plug-in exec não podem ser criados dessa maneira porque o plug-in não encontra o executável, mesmo que o diretório de trabalho esteja configurado.
precisa saber é o seguinte
15

Não acho que o maven apóie isso. Se você estiver no Unix e não quiser deixar seu diretório atual, poderá usar um pequeno script de shell, uma função de shell ou apenas um sub-shell:

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

Como uma função bash (que você pode adicionar ao seu ~ / .bashrc):

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

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

Sei que isso não responde à pergunta específica, mas pode fornecer o que você procura. Não estou familiarizado com o shell do Windows, embora você também deva encontrar uma solução semelhante.

Saudações

Kyle Burton
fonte
4
Excelente. mvn -f param não funciona com projetos de múltiplos módulos usando o caminho relativo para referenciar os poms filhos. Obrigado, era o que eu estava procurando.
Redochka 11/04
1
Tenho isso funcionando no Mac (e eu sei que funcionará no Linux). No Windows (ou em qualquer plataforma), você poderá salvar o caminho atual, cd no seu projeto, fazer coisas mvn lá e voltar ao cd em um script. O único problema seria se o script parasse no meio do caminho.
Erk
8

Para mim, funciona desta maneira: mvn -f /path/to/pom.xml [goals]

Jonathan Patrício Benedet
fonte
0

Você pode tentar isso:

pushd ../
maven install [...]
popd
Mick
fonte