Como construir frascos a partir do IntelliJ corretamente?

519

Eu tenho um projeto que contém um único módulo e algumas dependências. Eu gostaria de criar um jar, em um diretório separado, que contenha o módulo compilado. Além disso, gostaria de ter as dependências presentes ao lado do meu módulo.

Não importa como eu giro o processo "build jar" do IntelliJ, a saída do meu módulo aparece vazia (além de um arquivo META-INF).

ripper234
fonte

Respostas:

602

Veja como criar um jar com o IntelliJ 10 http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

File-> Project Structure-> Project Settings-> Artifacts-> Clique green plus sign-> Jar->From modules with dependencies...

O item acima define o "esqueleto" para onde o jarro será salvo. Para realmente criar e salvar, faça o seguinte:

Extrair para o Jar de destino

Está bem

Construir | Construir artefato | Construir

Tente Extrair o arquivo .jar de

ProjectName | fora | artefatos | ProjectName_jar | ProjectName.jar

EpicPandaForce
fonte
9
Falha quando algumas classes no seu jar incluído são assinadas com o RSA.
Asif Shahzad
1
@AsifShahzad veja esta resposta para criar arquivos jar com dependências assinadas: stackoverflow.com/questions/41746177/… .
5
Este método ainda falhar, o arquivo jar não executa
samuel Owino
6
Parece que alguém realmente trabalhou muito para não fazê-lo funcionar. É uma pena que nunca funcione. Eu tentei pelo menos 50 respostas diferentes e nada disso funcionou. E é a mesma história todas as vezes. Agora reservo uma semana para apresentá-lo como um jarro, já que todos em nossa empresa pensam que é um esforço genuíno que precisa ser feito na produção de um jar de saída.
Impressionante
2
Como muitos escreveram antes de mim, essa é uma simplificação que às vezes funciona. Consulte a resposta de @zsolt tolvali abaixo. Seria bom, da perspectiva do IntelliJ, tornar o processo de criação de JAR uma ATIVIDADE PADRÃO ao criar um novo projeto, porque poucas pessoas não precisam dele!
Etamar Laron
256

Ainda é um problema em 2017, espero que ajude alguém por aí! Encontrei 2 possibilidades para criar jar-s de trabalho no IntelliJ 2017.2

1. Criando artefato a partir do IntelliJ:

  • Vá para a estrutura do projeto:

Menu de arquivo

  • Crie um novo artefato:

Crie um novo artefato

  • Selecione a classe principal e não se esqueça de alterar a pasta do manifesto:

insira a descrição da imagem aqui

Você precisa alterar o diretório do manifesto:

<project folder>\src\main\java 

substitua "java" por "recursos"

<project folder>\src\main\resources

É assim que deve ser:

maneira correta de novo manifesto

  • Em seguida, você escolhe as dependências que deseja empacotar em seu jar ou PERTO de seu arquivo jar

  • Para construir seu artefato, vá para construir artefatos e escolha "reconstruir". Ele criará uma pasta "out" com seu arquivo jar e suas dependências.

insira a descrição da imagem aqui

2. Usando o maven-assembly-plugin

Adicionar seção de construção ao arquivo pom

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <finalName>ServiceCreate</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <archive>
                        <manifest>
                            <mainClass>com.svt.optimoo.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • Crie uma nova configuração de execução / depuração:

Crie uma nova configuração de execução / depuração:

  • Escolha a aplicação:

Escolha a aplicação

  • Preencher o formulário
  • Adicione o objetivo de montagem "assembly: single" após a compilação a ser executada pela última vez

insira a descrição da imagem aqui

Configuração final

  • Salve e execute

insira a descrição da imagem aqui

Este procedimento criará o arquivo jar na pasta "target"

Local do arquivo JAR

Zsolt Tolvaly
fonte
7
alterar o diretório do manifesto para src / resources é o ponto principal !!! Obrigado ~
fantouch
3
Este caminho manifesto é o mais crítico, graças @Zsolt Tolvaly
fruqi
2
Eu estava começando a no main manifest attributeadotar as soluções acima. Ninguém mencionou mudar o path to manifest. Thnx !!
Prometheus
1
essa deve ser a resposta principal. Obrigado!
Giorgos Lamprakis
e o código fonte no scala? java não é o que eu estou usando
kiwy
135

Recentemente, tive esse problema e acho que essas etapas são fáceis de seguir se faltarem detalhes de qualquer solução ou link anterior.

Como criar um .jarIntelliJ IDEA 14.1.5 usando:

  1. Arquivo> Salvar tudo.
  2. Execute o driver ou a classe com o método principal.
  3. Arquivo> Estrutura do Projeto.
  4. Selecione a guia "Artefatos".
  5. Clique no botão verde mais perto do topo da janela.
  6. Selecione JAR no menu suspenso Adicionar. Selecione "Dos módulos com dependências"
  7. Selecione a classe principal.
  8. O botão de opção deve estar selecionando "extrair para o JAR de destino". Pressione OK.
  9. Marque a caixa "Build on make"
  10. Pressione Aplicar e OK.
  11. No menu principal, selecione a lista suspensa de compilação.
  12. Selecione a opção construir artefatos.
user5442490
fonte
1
você perdeu alguma coisa? Existe uma opção sobre o módulo, o que deveria ser isso. No meu caso, está criando JAR, mas JVM por erro devido à segurança.
sonus21
Eu acho que essa lista é tudo. Você pode ter algo com as configurações do java parando devido à segurança. Alguém mais tem pensamentos sobre isso?
user5442490
Segui o mesmo e tenho Erro: Não foi possível encontrar ou carregar a classe principal JavaFundamentals.jar ao executar este arquivo jar. Explicado aqui: stackoverflow.com/questions/40636790/...
laggerok19
Esse processo de 12 etapas deve ser realizado toda vez que eu quiser criar um jar ou o IntelliJ se lembrará dessas ações para que você possa usar um atalho?
Andy
31

Para aqueles que se beneficiam de imagens como eu:

File -> Project Structure

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Crt
fonte
4
@ samuelowino eu não aprecio você dizendo isso. Explique o que "não funciona".
Crt
1
Hey @Crt eu não estava verificando o arquivo jar direita, aparentemente, Inteliji produziu dois arquivos JAR em diretórios diferentes, desculpas, meu mau, suas obras solução, graças
samuel Owino
15

Aqui estão 2 exemplos com o projeto maven, passo a passo:

Método 1: criar jar com maven e pom.xml

  1. Arquivo, novo, projeto, maven
  2. criar um pacote, criar um programa java dentro desse pacote insira a descrição da imagem aqui
  3. em pom.xml, adicione maven-jar-plugin.

        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>somePackage.sample</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

captura de tela: insira a descrição da imagem aqui 4. abra a caixa do projeto maven clicando no ícone de pesquisa e digite maven, insira a descrição da imagem aqui

  1. clique em limpar e clique em instalar insira a descrição da imagem aqui

  2. seu arquivo jar aparecerá dentro da pasta de destino insira a descrição da imagem aqui

  3. teste seu jar usando java -jar

insira a descrição da imagem aqui

Método 2: criar jar com maven sem alteração pom.xml

  1. Arquivo, novo, projeto, maven
  2. crie um pacote, crie um programa java dentro desse pacote (o mesmo que acima)
  3. File-> Project Structure-> Project Settings-> Artifacts-> Clique green plus sign-> Jar->From modules with dependencies

Muito importante!

O MANIFEST.MF precisa estar na sua pasta de recursos e o Main.Class precisa se referir a {package} - {class-name-that-contains-main-class}

insira a descrição da imagem aqui insira a descrição da imagem aqui

  1. depois clique em construir no menu, construir artefatos, construir

insira a descrição da imagem aqui

  1. encontre o frasco na pasta de saída

insira a descrição da imagem aqui

  1. executá-lo :)

insira a descrição da imagem aqui

rrr
fonte
isso funciona. Você pode explicar por que o MANIFEST.MF precisa estar nesse diretório?
Ubeogesh
Isso ajuda para mim
Devendra Singraul
5

Provavelmente é um pouco tarde, mas consegui resolvê-lo desta maneira -> abra com o winrar e exclua ECLIPSEF.RSA e ECLIPSEF.SF na pasta META-INF, além disso, coloque "Main-class: main_class_name" (sem ".class" ) em MANIFEST.MF. Certifique-se de pressionar "Enter" duas vezes após a última linha, caso contrário não funcionará.

Baka
fonte
Para dependências assinadas, consulte esta resposta: stackoverflow.com/questions/41746177/…
Que questão insana. Alguma idéia de por que isso acontece ou como consertar? Isso sente-se hacky
Andrew No
5

Quando eu uso essas soluções este erro vem:

java -jar xxxxx.jar

nenhum atributo principal do manifesto, em xxxxx.jar

e solução é :

Você precisa alterar o diretório do manifesto:

<project folder>\src\main\java 

alterar java para recursos

<project folder>\src\main\resources
Saeed
fonte
Ufa, finalmente, obrigado pela dica!
Rendon
@rendon Boa sorte ufa!
Saeed
Perfeito! Isso funciona bem
jafarmlp 03/03
2

Eu estava tentando criar um jar a partir de um aplicativo Kotlin de vários módulos e estava recebendo o notório erro 'nenhum atributo de manifesto principal'. A criação do diretório de manifesto src/main/resourcestambém não funcionou.

Em vez disso, ele funciona ao criar-lo em srcdiretamente: src/META-INF/MANIFEST.MF.

insira a descrição da imagem aqui

Tobias Uhmann
fonte
Oi, obrigado, está funcionando bem. Mas agora eu tenho um novo erro que não está localizando os recursos "java.desktop / javax.swing.ImageIcon java.lang.NullPointerException"
Shivam Mathur
2

insira a descrição da imagem aqui

Como as pessoas acima dizem, mas tenho que observar um ponto. Você precisa marcar a caixa de seleção:

Incluir na construção do projeto

Benchur Wong
fonte
1

Idéia 8.1.3

Jar está ok, já que há saída compilada no diretório 'output' (projeto / saída / produção //)

Eu acho que você precisa executar 'make' antes de construir o jar

para dependências, basta marcar "show library" e escolher o que deseja.

Vugluskr
fonte
1

Com o Maven, você pode usar este plugin:

 <build>
    <plugins>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>[path you class main]</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase> 
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
fede beron
fonte
0

Você pode dar uma olhada no Maven ( http://maven.apache.org ). Você pode usá-lo como o principal processo de compilação do seu aplicativo ou apenas para executar determinadas tarefas através da caixa de diálogo Editar configurações. O processo de criação de um JAR de um módulo no Maven é bastante trivial, se você desejar incluir todas as dependências em um JAR auto-executável que também é trivial.

Se você nunca usou o Maven antes, deseja ler Better Builds With Maven .

Gary Rowe
fonte
8
O Maven está obviamente sobrecarregado para tarefas simples como criar jar. Talvez formiga, mas não maquiada, com certeza.
Juriy
Link is dead (out 2014)
KathyA.
1
@KathyA. Obrigado - atualizado para usar as recomendações da equipe Maven.
Gary Rowe
5
Se é tão trivial, por que não incluí-lo na sua resposta?
Nuzzolilo 27/01
1
Porque desejo que o leitor visite o site e comece o processo de aprendizado.
Gary Rowe
0

Se você estiver usando bibliotecas de terceiros com seu projeto ou se tiver problemas ao criar o arquivo MANIFEST.MF corretamente, poderá haver conflitos ao executar arquivos JAR gerados usando

File > Project Structure > Artifacts > '+' > JAR > From modules with dependencies > .....

método mencionado acima.

Em vez disso, sugiro que você crie um JAR vazio e adicione todos os outros elementos à raiz de saída manualmente. Um artigo de blog maravilhoso para esse método pode ser encontrado aqui: http://karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/ Tentei as etapas mencionadas lá e tudo funcionou bem para mim!

Thilina Ashen Gamage
fonte
Obrigado, isso me ajudou! Parece haver um erro no Intellij, em que o manifesto do projeto é substituído no JAR por um manifesto padrão se você selecionar "JAR" como o tipo de artefato em vez de "Outro".
vermelho
0

Algumas das outras respostas são inúteis porque, assim que você reimportar o projeto IntelliJ IDEA do projeto maven, todas as alterações serão perdidas.

A construção do jar precisa ser acionada por uma configuração de execução / depuração, não pelas configurações do projeto.

O Jetbrains tem uma boa descrição de como você pode fazer isso aqui:

https://www.jetbrains.com/help/idea/maven.html

Role para a seção "Configurando gatilhos para objetivos do Maven".

(A única desvantagem de sua descrição é que as capturas de tela estão no esquema de cores preto e branco padrão, em vez do tema super impressionante do darcula. Ugh!)

Então, basicamente, o que você faz é abrir o painel "Projetos Maven", encontrar o projeto de seu interesse (no seu caso, o projeto que constrói seu jar); por baixo, você encontra o objetivo final que deseja executar , (geralmente a meta "pacote" cria jars), você abre o menu de contexto (clique com o botão direito do mouse em uma máquina Windows) e haverá a opção "Executar antes da execução / depuração ..." selecione e o levará pela mão de lá. Muito fácil.

Mike Nakis
fonte
0

Caso esteja tentando criar um jar com o kotlin, você precisa criar uma src/main/javapasta e usá-la como um local para a pasta META-INF.

Chris
fonte
0

Aqui está a resposta oficial da Ajuda do IntelliJ IDEA 2018.3 . Eu tentei e funcionou.

Para construir um arquivo JAR a partir de um módulo;

  1. No menu principal, escolha Build | Construir artefato.

  2. Na lista suspensa, selecione o artefato desejado do tipo JAR. A lista mostra todos os artefatos configurados para o projeto atual. Para ter todos os artefatos configurados construídos, escolha a opção Construir todos os artefatos.

Sabri Meviş
fonte
0

Meu problema era o seguinte: usei o Intellij IDEA (tentei versões diferentes) + Gradle. Quando compilei o projeto e construí o jar do artifacf, conforme indicado nas respostas acima, recebi um erro - "nenhum manifesto principal atribui ..."

Esta solução funcionou para mim (agradecimentos especiais a Thilina Ashen Gamage (veja acima) pela dica):

Trecho - se você usar bibliotecas externas e criar um projeto por meio de Configurações do projeto - Artefatos - Adicionar (+) - Jar - De módulos com dependências , provavelmente por causa de um erro de programa, a pasta META-INF com o arquivo MANIFEST_MF não inclui o jar. Para evitá-lo, crie VAZIO arquivo jar .

Configurações do projeto - Artefatos - Adicionar (+) - Jar - JAR VAZIO . A pasta META-INF será adicionada à pasta de recursos . Então selecione sua classe principal. Você verá a seguinte estrutura do jar: observe a presença de uma pasta META-INF Observe a presença de uma pasta META-INF. Em seguida, você pode construir seu projeto e artefatos. Essa solução também funcionou para aplicativos javaFX.

Orkhan Hasanli
fonte
-1

Se você estiver trabalhando no projeto spring / mvn, poderá usar este comando:

mvn package -DskipTests

O arquivo jar será salvo no diretório de destino.

Hans Pour
fonte
-3

Ant e Maven são amplamente utilizados. Prefiro Ant, sinto que é mais leve e você, o desenvolvedor, está mais no controle. Alguns sugerem que essa é a sua desvantagem :-)

Brian
fonte
3
Isso não explica nada por que o erro está acontecendo.
precisa saber é