Como faço um JAR de um arquivo .java?

87

Eu estava escrevendo um programa simples usando um aplicativo Java (não um aplicativo que possui projetos, mas um aplicativo dentro de um projeto; .java ) que possui um único quadro. Ambos os arquivos são .java então não posso escrever um manifesto necessário para o JAR.

o MyApp.java começa como uma classe com pacote, importa a classe pública MyAppe tem uma função principal, mas ainda é um arquivo .java! Estou escrevendo no JDeveloper 11g, se ajudar.

Alguma ideia de como fazer um JAR a partir desses arquivos?

user1303007
fonte
1
Acho que isso pode ser feito muito mais facilmente usando uma ferramenta de empacotamento como ANT ou Maven
Churk
Concordo com Chuck. Dê uma olhada no ANT. IDEs são ótimos para desenvolvimento, mas você precisa entender como as coisas funcionam. Os arquivos java são compilados via javac para arquivos .class, depois disso, os arquivos .class podem ser empacotados em um jar com o comando jar. (Ant tem tarefas para fazer isso, até mesmo jdeveloper tem algum assistente para fazer isso).
BigMike
O próprio JDeveloper deve ter a capacidade de criar arquivos jar. Uma rápida pesquisa no Google traz
stolzem
1
Você pode esclarecer sua dúvida?
Romain Hippeau
Vá para o diretório de origem e execute o comando: - javac * .java && jar cvf JarName.jar * .class
garish

Respostas:

102

Abra um prompt de comando.

Vá para o diretório onde você tem seus arquivos .java

Criar um diretório

Execute a compilação java a partir da linha de comando

javac -d ./build *.java

se não houver erros, no diretório de construção você deve ter sua árvore de classes

mova para o diretório de construção e faça um

jar cvf YourJar.jar *

Para adicionar opções de linha de comando jar de verificação de manifesto

BigMike
fonte
Tentei compilar na linha de comando, mas recebo um erro: Frame1.java:23: package oracle.jdeveloper.layout does not exist Como faço para resolver isso? Desculpe pelas perguntas de novato ...
user1303007
você tem que construir o classpath referindo-se a todas as bibliotecas que você está referenciando em suas classes. Verifique com a instalação do jdeveloper, deve haver algum exemplo de construção de formiga (arquivo build.xml) e pelo menos alguns bons tutoriais sobre como usar o jDeveloper com ANT no site da Oracle.
BigMike
@ user1303007 dê uma olhada aqui oracle.com/technetwork/articles/adf/part4-098813.html
BigMike
1
Eu adicionei uma opção ao meu comando jar para adicionar automaticamente a classe principal ao manifesto ... jar cfe Main.jar Main *(Mas fiquei confuso, tive que colocar o nome da classe principal após o nome do arquivo de saída.)
Hydroper
31

Simplesmente com linha de comando:

javac MyApp.java
jar -cf myJar.jar MyApp.class

Claro que os IDEs evitam usar o terminal de linha de comando

ab_dev86
fonte
11
O .classprocedimento acima funcionou, mas eu precisei especificar o do myApp. Assim foijar -cf myJar.jar myApp.class
Navigatron
3
Erros ortográficos aqui também, e presume que não há instrução de pacote. Não é adequado.
Marquês de Lorne
14

Ok, esta é a solução que eu gostaria de encontrar, em vez disso, aqui eu escrevo:

Primeiro crie a estrutura de diretórios correspondente ao pacote definido para o arquivo .java, se for my.super.application crie o diretório "meu" e dentro dele "super" e dentro dele o arquivo .java "App.java"

em seguida, na linha de comando:

   javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java

Observe que o acima incluirá várias bibliotecas, se no Windows use "," para separar vários arquivos, caso contrário, no GNU / Linux use ":" Para criar um arquivo jar

   jar -cvfe App.jar App my/app/

o acima irá criar o aplicativo com seu Manifesto correspondente, indicando o aplicativo como a classe principal.

Incluir as bibliotecas necessárias dentro do arquivo jar não é possível usando parâmetros de linha de comando java ou jar.

Em vez disso, você pode:

  1. extraia manualmente as bibliotecas para a pasta raiz do arquivo jar
  2. use um IDE como o Netbeans e insira uma regra dentro da seção pós-jar de nbproject / build-impl.xml para extrair as bibliotecas dentro do jar. Ver abaixo.
<target name="-post-jar">
        <!-- Empty placeholder for easier customization. -->
        <!-- You can override this target in the ../build.xml file. -->
  <jar jarfile="${dist.jar}" update="true">  
            <zipfileset src="${dist.jar}" includes="**/*.class" />  
            <zipfileset src="${file.reference.iText-1.0.8.jar}" includes="**/*"/>
      <zipfileset src="${file.reference.itextpdf-3.2.1.jar}" includes="**/*"/>
  </jar>
    </target>

os nomes de file.reference são encontrados dentro do arquivo project.properties depois que você adiciona as bibliotecas ao Netbeans IDE.

sarah.ferguson
fonte
9

Freqüentemente, você desejará especificar um manifesto, como:

jar -cvfm myJar.jar myManifest.txt myApp.class

Que diz: "criar jarFilename verboso manifestFilename", seguido pelos arquivos que você deseja incluir. Detalhado significa imprimir mensagens sobre o que está fazendo.

Observe que o nome do arquivo de manifesto fornecido pode ser qualquer um, já jarque o renomeia automaticamente e o coloca no diretório correto dentro do arquivo jar.

Evgeni Sergeev
fonte
6

Isso pode ser feito sem terminal, diretamente do IDE. Netbeans, por exemplo.

  1. Crie um projeto separado com pacotes (Criar Projeto - Java - Biblioteca de Classes Java).
  2. Coloque suas classes .java lá.
  3. Construa este projeto.
  4. Vá para a pasta do projeto e encontre as pastas build e dist.
  5. Encontre o arquivo .jar em sua pasta dist.
  6. Obtenha seu outro projeto e inclua este arquivo .jar nas bibliotecas do projeto.
  7. Agora você pode fazer referência a classes desta biblioteca e seus métodos diretamente do código, se a importação for feita automaticamente para você.
Zon
fonte
3

Aqui está outra maneira sofisticada de fazer isso:

$ ls | grep .java | xargs -I {} javac {} ; jar -cf myJar.jar *.class

Que pegará todos os arquivos .java ( ls | grep .java) de seu diretório atual e os compilará em .class ( xargs -I {} javac {}) e então criará o arquivo jar a partir das classes compiladas anteriormente ( jar -cf myJar.jar *.class).

Matthieu vdBiggelaar
fonte
2

Talvez a maneira mais amigável para iniciantes de compilar um JAR a partir de seu código Java seja usar um IDE (ambiente de desenvolvimento integrado; essencialmente apenas software amigável para desenvolvimento) como Netbeans ou Eclipse.

  • Instale e configure um IDE. Aqui está a última versão do Eclipse .
  • Crie um projeto em seu IDE e coloque seus arquivos Java dentro da pasta do projeto.
  • Selecione o projeto no IDE e exporte-o como um JAR. Verifique se os arquivos java apropriados foram selecionados ao exportar.

Você sempre pode fazer isso muito facilmente com a linha de comando. Certifique-se de que você está no mesmo diretório dos arquivos de destino antes de executar um comando como este:

javac YourApp.java
jar -cf YourJar.jar YourApp.class

... alterando "YourApp" e "YourJar" para os nomes próprios de seus arquivos, respectivamente.

Randall Arms Jr.
fonte