Construindo um pote runnable com Maven 2

Eu sou relativamente novo no mantra Maven, mas estou tentando construir um jar runnable de linha de comando com o Maven. Eu configurei minhas dependencies, mas quando eu executo o mvn install e tento rodar o jar, duas coisas acontecem. Primeiro, nenhuma class principal é encontrada, que é corrigível. Quando eu corrijo isso, eu recebo erros na execução informando que as classs não podem ser encontradas.

O Maven não está empacotando minhas bibliotecas de dependencies dentro do jar, portanto, não consigo executar o jar como um aplicativo independente. Como corrijo isso?

A maneira mais fácil de fazer isso seria criar um assembly usando o maven-assembly-plugin e o descritor jar-with-dependencies predefinido. Você também precisará gerar um manifesto com uma input de class principal para este uber jar. O trecho abaixo mostra como configurar o plug-in de assembly para fazer isso:

    maven-assembly-plugin   jar-with-dependencies    fully.qualified.MainClass       

Então, para gerar a assembly, basta executar:

 mvn assembly:assembly 

Se você quiser gerar o assembly como parte de sua construção, simplesmente ligue o assembly:single mojo à fase de pacote:

    maven-assembly-plugin   jar-with-dependencies    fully.qualified.MainClass      package  single       

E simplesmente execute:

 mvn package 

O Maven não está empacotando suas dependencies dentro do seu arquivo jar, porque você normalmente não faz isso com programas Java.

Em vez disso, você entrega as dependencies junto com seu arquivo jar e as menciona no header Class-Path do Manifesto .

Para seguir esse caminho, você precisará ativar a propriedade addClasspath (documentada aqui ) para o maven-jar-plugin .

Se você realmente quer include todas as suas dependencies no seu arquivo jar, então você pode usar o plugin Maven Assembly para criar um jar-with-dependencies .

Isto é o que eu faria para pequenos projetos. Na maioria das vezes você não quer um pote enorme.

para construir: mvn clean dependency: pacote de dependencies de cópia

para executar ( no dir de destino ): java -cp myjar.jar: ./dependence / * com.something.MyClass

Eu concordo com Joachim Sauer,

Em vez de usar jar-with-dependency, você deve configurar o plugin jar assim em seu pom.xml:

  org.apache.maven.plugins maven-jar-plugin 2.4   true  true [mainClassFullName]   development ${project.url} value     

E use essa configuração de assembly para adicionar as dependencies do jar ao seu assembly:

  zip-with-jars  zip  false    / true false runtime     

Basta adicionar o código abaixo em pom.xml e Executar como: maven: install. O jar será criado na pasta de destino do eclipse, que pode ser usado como “java -jar Hello.jar”. mas certifique-se de que o nome da class principal seja fornecido com.abc.HelloWorld.java

    org.apache.maven.plugins maven-shade-plugin   package  shade   HelloW    com.abc.HelloWorld.java 1