Construir projeto Eclipse Java da linha de comando

118

Existe uma maneira de compilar um projeto Java baseado em Eclipse a partir da linha de comando?

Estou tentando automatizar minha construção (usando FinalBuilder, não formiga) e não sou especialista em Java nem em Eclipse. Provavelmente posso descobrir como fazer isso com opções de linha de comando java direto, mas então o projeto Eclipse parece um grande desperdício de esforço.

No caso de não haver como compilar um projeto Eclipse por meio da linha de comando, há uma maneira de gerar a linha de comando Java necessária de dentro do Eclipse? Ou existem alguns arquivos que eu possa vasculhar para encontrar as etapas de compilação que ele está executando nos bastidores?


Pessoal, estou procurando uma resposta que NÃO inclua formiga. Deixe-me repetir a pergunta original ... Existe uma maneira de construir um projeto Eclipse a partir da linha de comando?

Não acho que seja uma pergunta irracional, já que posso fazer algo assim para o estúdio visual:

devenv.exe /build "Debug|Any CPU" "C:\Projects\MyProject\source\MyProject.sln"
Keith G
fonte
3
Como não existe um plugin / jar para isso !!
Kieveli de
1
Ok ... eu adicionei uma nova resposta correta.
Kieveli,

Respostas:

61

Você pode construir um projeto eclipse por meio de um espaço de trabalho da linha de comando:

eclipsec.exe -noSplash -data "D:\Source\MyProject\workspace" -application org.eclipse.jdt.apt.core.aptBuild

Ele usa o jdt aptplugin para construir seu espaço de trabalho automaticamente. Isso também é conhecido como 'Headless Build'. Muito difícil de descobrir. Se não estiver usando um exe win32, você pode tentar isto:

java -cp startup.jar -noSplash -data "D:\Source\MyProject\workspace" -application org.eclipse.jdt.apt.core.aptBuild

Atualizar

Há vários anos, o eclipse foi substituído startup.jarpelo "lançador de equinócio"

https://wiki.eclipse.org/Equinox_Launcher

No Eclipse Mars (MacOX):

java -jar /Applications/Eclipse.app/Contents/Eclipse/plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar -noSplash -data "workspace" -application org.eclipse.jdt.apt.core.aptBuild

O -dataparâmetro especifica a localização de sua área de trabalho.

O número da versão do iniciador do equinócio dependerá da versão do eclipse que você possui.

Kieveli
fonte
4
Embora eu já tenha saído deste projeto há muito tempo e não possa verificar se essa resposta realmente funciona ou não, estou mudando a resposta aceita para esta. Porque indica que o Eclipse realmente tem uma opção de linha de comando.
Keith G
3
Apenas um pensamento - parece que isso só funciona para espaços de trabalho pré-existentes. Acho que isso torna difícil, por exemplo, fazer o checkout do projeto no controle de origem e construí-lo dessa maneira.
João
Acredito que meu espaço de trabalho foi comprometido com o repositório svn. Ele tinha caminhos relativos ou estruturas de diretório correspondentes.
Kieveli,
2
Como você vê os resultados da construção? Eu tentei isso e obtive a saída: "Building workspace", mas não obtive indicação se a compilação foi bem-sucedida ou falhou.
Dikla
Você também pode construir seu espaço de trabalho por meio de um script de formiga de linha de comando. Veja help.eclipse.org/indigo/…
reprogrammer
22

Para completar a resposta de André, uma solução de formiga poderia ser como a descrita no Emacs, JDEE, Ant e o Eclipse Java Compiler , como em:

      <javac
          srcdir="${src}"
          destdir="${build.dir}/classes"> 
        <compilerarg 
           compiler="org.eclipse.jdt.core.JDTCompilerAdapter" 
           line="-warn:+unused -Xemacs"/>
        <classpath refid="compile.classpath" />
      </javac>

O elemento compilerarg também permite que você passe argumentos de linha de comando adicionais para o compilador eclipse.

Você pode encontrar um exemplo completo de script Ant aqui, que seria chamado em uma linha de comando com:

java -cp C:/eclipse-SDK-3.4-win32/eclipse/plugins/org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar org.eclipse.core.launcher.Main -data "C:\Documents and Settings\Administrator\workspace" -application org.eclipse.ant.core.antRunner -buildfile build.xml -verbose

MAS tudo isso envolve formigas, o que não é o que Keith quer.

Para uma compilação em lote, consulte Compilar o código Java , especialmente a seção " Usando o compilador em lote "

A classe do compilador de lote está localizada no plug-in JDT Core. O nome da classe é org.eclipse.jdt.compiler.batch.BatchCompiler. Ele está empacotado em plugins / org.eclipse.jdt.core_3.4.0..jar. Desde o 3.2, ele também está disponível como um download separado. O nome do arquivo é ecj.jar.
Desde 3.3, este jar também contém o suporte para jsr199 (API do compilador) e o suporte para jsr269 (processamento de anotação). Para usar o suporte ao processamento de anotações, uma VM 1.6 é necessária.

Executar o compilador em lote na linha de comando daria

java -jar org.eclipse.jdt.core_3.4.0<qualifier>.jar -classpath rt.jar A.java

ou:

java -jar ecj.jar -classpath rt.jar A.java

Todas as opções de compilação de java são detalhadas nessa seção também.

A diferença com o recurso de compilação de linha de comando do Visual Studio é que o Eclipse não parece ler diretamente seu .project e .classpath em um argumento de linha de comando . Você deve relatar todas as informações contidas em .project e .classpath em várias opções de linha de comando para obter o mesmo resultado de compilação.

Então, a resposta curta é: "sim, Eclipse meio que sim." ;)

VonC
fonte
2
É possível compilar um espaço de trabalho com o projeto Eclipse usando o projeto ant4eclipse, mas é necessário muito esforço, pois você precisa fazer todas as etapas necessárias manualmente com base nas metainformações extraídas. Eu fiz isso para nossos projetos internos, mas não recomendaria, a menos que você REALMENTE precise! Fizemos :-D
Thorbjørn Ravn Andersen
@ Thorbjørn Ravn Andersen: obrigado por este feedback. Você também pode postar uma resposta neste tópico ilustrando o tipo de "graxa de cotovelo" envolvido aqui;)
VonC
bem, o que eu hackeei com base no ant4eclipse - que requer um arquivo projectSet.psf - para emular a funcionalidade "export runnable jar" não é bonito, portanto nenhuma resposta. Além disso, ele não está executando Eclipse, mas simulando Eclipse usando formiga: D
Thorbjørn Ravn Andersen
Deparamos com esta velha resposta: Descobrimos que "emular a construção do Eclipse usando arquivos de configuração do Eclipse" é muito frágil a longo prazo e aconselho fortemente outros a não seguirem esse caminho. Em vez disso, use projetos Maven.
Thorbjørn Ravn Andersen
1
@JeffPuckettII Obrigado. Eu restaurei o link.
VonC
8

Após 27 anos, eu também me sinto desconfortável desenvolvendo em um IDE. Tentei essas sugestões (acima) - e provavelmente não segui tudo certo - então fiz uma pesquisa na web e encontrei o que funcionou para mim em ' http://incise.org/android-development-on-the- command-line.html '.

A resposta parecia ser uma combinação de todas as respostas acima (diga-me se estou errado e aceite minhas desculpas se estiver).

Como mencionado acima, o eclipse / adt não cria os arquivos Ant necessários. Para compilar sem eclipse IDE (e sem criar scripts de formigas):

1) Gere build.xml em seu diretório de nível superior:

android list targets  (to get target id used below)

android update project --target target_id --name project_name  --path top_level_directory

   ** my sample project had a target_id of 1 and a project name of 't1', and 
   I am building from the top level directory of project
   my command line looks like android update project --target 1 --name t1 --path `pwd`

2) Em seguida, compilo o projeto. Fiquei um pouco confuso com o pedido para não usar 'formiga'. Com sorte - o solicitante quis dizer que não queria escrever nenhum script de formiga. Digo isso porque o próximo passo é compilar o aplicativo usando formiga

 ant target

    this confused me a little bit, because i thought they were talking about the
    android device, but they're not.  It's the mode  (debug/release)
    my command line looks like  ant debug

3) Para instalar o apk no dispositivo, tive que usar o formiga novamente:

 ant target install

    ** my command line looked like  ant debug install

4) Para executar o projeto no meu telefone Android, eu uso o adb.

 adb shell 'am start -n your.project.name/.activity'

    ** Again there was some confusion as to what exactly I had to use for project 
    My command line looked like adb shell 'am start -n com.example.t1/.MainActivity'
    I also found that if you type 'adb shell' you get put to a cli shell interface
    where you can do just about anything from there.

3A) Uma observação lateral: para visualizar o registro do uso do dispositivo:

 adb logcat

3B) Uma segunda nota lateral: O link mencionado acima também inclui instruções para construir todo o projeto a partir do comando.

Esperançosamente, isso ajudará com a pergunta. Eu sei que fiquei muito feliz em encontrar algo sobre esse tópico aqui.

Charles Thomas
fonte
1
se o projeto já estiver compilado (no modo de depuração, por exemplo), você pode usar ant installdpara instalar sem compilar
serv-inc
4

A abordagem normal funciona ao contrário: você cria sua construção com base em maven ou formiga e, em seguida, usa integrações para o IDE de sua escolha para que você seja independente dele, que é esp. importante quando você tenta trazer novos membros da equipe para a velocidade ou usar um servidor de integração contínua para compilações automatizadas. Eu recomendo usar o maven e deixá-lo fazer o trabalho pesado para você. Crie um arquivo pom e gere o projeto eclipse via mvn eclipse: eclipse. HTH

André
fonte
4
Freqüentemente, é muito mais agradável emular o fluxo de trabalho atual em vez de dizer a cada desenvolvedor para mudar seu comportamento. Especialmente quando o Eclipse é muito mais rápido que a formiga.
Thorbjørn Ravn Andersen
2

Esta questão contém alguns links úteis em compilações headless, mas eles são principalmente voltados para a construção de plug-ins. Não tenho certeza de quanto disso pode ser aplicado a projetos Java puros.

JesperE
fonte
1

Só queria adicionar meus dois centavos a isso. Tentei fazer como @Kieveli sugeriu para não win32 (repetido abaixo), mas não funcionou para mim (no CentOS com Eclipse: Luna):

java -cp startup.jar -noSplash -data "D:\Source\MyProject\workspace" -application org.eclipse.jdt.apt.core.aptBuild

Na minha configuração específica no CentOS usando Eclipse (Luna), isso funcionou:

$ECLIPSE_HOME/eclipse -nosplash -application org.eclipse.jdt.apt.core.aptBuild  startup.jar -data ~/workspace

A saída deve ser semelhante a esta:

Building workspace
Building '/RemoteSystemsTempFiles'
Building '/test'
Invoking 'Java Builder' on '/test'.
Cleaning output folder for test
Build done
Building workspace
Building '/RemoteSystemsTempFiles'
Building '/test'
Invoking 'Java Builder' on '/test'.
Preparing to build test
Cleaning output folder for test
Copying resources to the output folder
Analyzing sources
Compiling test/src/com/company/test/tool
Build done

Não sei bem por que aparentemente fez isso duas vezes, mas parece funcionar.

jkwinn26
fonte
0

Olá, apenas adição aos comentários do VonC. Estou usando o compilador ecj para compilar meu projeto. estava jogando expcetion que algumas das classes não foram encontradas. Mas o projeto estava funcionando bem com o compilador javac.

Então, apenas adicionei as classes ao caminho de classe (que temos que passar como argumento) e agora está funcionando bem ... :)

Kulbir Singh


fonte
-3

Resposta curta. Não. O Eclipse não tem uma opção de linha de comando como o Visual Studio para construir um projeto.

PDeva
fonte
5
Resposta curta: sim. Eclipse meio que sim. Exceto que você tem que relatar todas as informações contidas no .project e .classpath em várias opções de linha de comando
VonC
Soluções de construção externa (para Eclipse) como formiga ou maven são normalmente usadas para isso, conforme observado em outras respostas.
JR Lawhorne