Executando classes principais de um artefato implantado com maven
-
11-12-2019 - |
Pergunta
Eu não entendo.Eu configurei meu pom.xml para usar o plugin exec Maven para que eu possa executar algumas das classes em meu projeto com o caminho de classe correto, -D define e -javaagent.Então, a partir de um shell com as classes incorporadas em ./target/classes etc.Posso executar os métodos main() usando
mvn exec:java -Dexec:mainClass=classWithAMainMethod
Tudo bem até agora.
Agora quero enviar meu projeto (um artefato jar) e ainda quero poder usar a configuração que coloquei no pom.xml para executar as classes com os argumentos corretos etc.Como eu faço isso?Existe alguma maneira de ficar
mvn -artifactJar=MyArtifact.jar exec:java -Dexec:mainClass=classWithAMainMethod
quando tudo que tenho é MyArtifact.jar (ou um repositório maven com MyArtifact.jar nele)??
Eu tentei o seguinte:
Obtenha o jar com a dependência:get goal e descompacte-o.Não posso fazer nada com isso, pois o pom.xml parece acabar em meta-inf/maven no frasco de artefatos.Existe alguma maneira de usá-lo?
Criando um pom fictício onde desejo executar meu projeto com uma única dependência do artefato do meu projeto.Posso então usar exec:java para executar as classes principais, mas não usa a configuração dos meus projetos pom.
Obrigado.
Solução 2
O plugin AppAssembler funcionou muito bem para mim.Substituí a configuração do plugin exec no pom do meu projeto por algo assim na seção de construção:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<repositoryLayout>flat</repositoryLayout>
<repositoryName>lib</repositoryName>
<extraJvmArguments>
-Djava.rmi.server.hostname=localhost
-javaagent:${spring.javaagent.jar}
</extraJvmArguments>
<programs>
<program>
<name>foo1</name>
<mainClass>net.foor.FooMain</mainClass>
</program>
...
</configuration>
</plugin>
No Eclipse, criei um inicializador de ferramentas externas para executar os scripts resultantes de alvo/appassembler/bin
Na máquina que eu queria implantar (assumindo acesso ao repositório interno do Maven onde meu artefato + dependências foram instalados/implantados):
- Primeiro uso wget ou dependência mvn: obter para obter uma cópia do meu frasco de artefato.
- Extraia o pom. descompacte -j artefato.jar */pom.xml*
- Correr mvn appassembler:assemble -DassembleDirectory=.
- Mova o artefato.jar para o diretório ./lib
- Defina permissões de execução em scripts de shell gerados em ./bin
Outras dicas
Você já tentou usar algo como um jarro?
Parece o que você está procurando.