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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top