Construção versus compilação (Java)


138

Pensando que a resposta para isso é bastante óbvia, mas aqui vai:

Quando estou trabalhando em um pequeno projeto para a escola (em java), compilo .

No meu galinheiro, estamos usando formiga para construir nosso projeto.

Eu acho que compilar é um subconjunto de construção. Isso está correto? Qual é a diferença entre criar e compilar?

Relacionado:
Qual é a diferença entre compilar e construir?

Respostas:


229

O "Build" é um processo que abrange todas as etapas necessárias para criar um "deliverable" do seu software. No mundo Java, isso normalmente inclui:

  1. Gerando fontes (às vezes).
  2. Compilando fontes.
  3. Compilando fontes de teste.
  4. Executando testes (testes de unidade, testes de integração, etc).
  5. Embalagem (em jarra, guerra, ejb-jar, orelha).
  6. Execução de verificações de integridade (analisadores estáticos como Checkstyle, Findbugs, PMD, cobertura de teste etc.).
  7. Gerando relatórios.

Como você pode ver, a compilação é apenas uma parte (pequena) da compilação (e a melhor prática é automatizar completamente todas as etapas com ferramentas como Maven ou Ant e executar a compilação continuamente, conhecida como Integração Contínua ).


2
Por que chamá-lo de "integração contínua" em vez de "construção contínua"?
Quazi Irfan

@ Pascal, Re "executar a compilação continuamente" .. "a compilação " se refere?
Pacerier

4
@Pacerier "the build" refere-se a todas as etapas 1 a 7 .; "continuamente" não significa que você inicia a próxima compilação imediatamente após o término da primeira, mas apenas as alterações no projeto.
Michelek #

e quando ele gerar fontes como você menciona no ponto 1 (fontes geradoras (às vezes).)
Deepak Gupta

42

Algumas das respostas que vejo aqui estão fora de contexto e fazem mais sentido se essa for uma pergunta em C / C ++.

Versão curta:

  • "Compilar" está transformando arquivos .java em arquivos .class
  • 'Construção' é um termo genérico que inclui compilação e outras tarefas.

"Edifício" é um termo genérico que descreve o conjunto processo que inclui a compilação. Por exemplo, o processo de construção pode incluir ferramentas que geram código Java ou arquivos de documentação.

Freqüentemente haverá fases adicionais, como "pacote", que pega todos os seus arquivos .class e os coloca em um .jar, ou "clean", que limpa os arquivos .class e diretórios temporários.


32

Compilando é o ato de transformar o código-fonte em código-objeto.

Linking é o ato de combinar código de objeto com bibliotecas em um executável bruto.

Construção é a sequência composta de compilação e vinculação , possivelmente com outras tarefas, como a criação do instalador.

Muitos compiladores lidam com a etapa de vinculação automaticamente após compilar o código-fonte.

Qual é a diferença entre código de compilação e código executável?


Algumas outras tarefas possíveis: aprimoramento (JDO), Javadoc-ing, empacotamento e assinatura. Além disso, alguns ambientes, incluindo a execução de testes de unidade / regressão automatizados como parte de uma "construção".
Bert F

Normalmente, não há etapa de vinculação ao criar projetos Java e nenhum executável bruto é produzido. Em vez disso, as classes compiladas são empacotadas juntas em um arquivo .jar como parte da compilação. (Ou .war ou .ear, dependendo do seu ambiente de destino.)
markusk

1
o que são "executáveis ​​brutos"?
ealeon 23/07

O pacote de bits que é basicamente inútil por si só, sem ser misturado às outras bibliotecas de que ele precisa. É como um bolo de chocolate. Sem a farinha e os ovos, etc, o cacau é apenas cacau cru.
Kaili

9

Em palavras simples

A compilação traduz o código java (legível por humanos) em código de bytes, para que a máquina virtual o entenda.

A construção reúne todas as partes compiladas e cria (cria) um executável.


O que você está falando é "Interpretação" ... compilando está girando o código legível em código de máquina
mortsahl

@ Tom, você quer dizer um "executável" ou " jar executável"?
Pacerier

4

Na verdade você está fazendo a mesma coisa. O Ant é um sistema de compilação baseado em arquivos de configuração XML que podem executar uma ampla gama de tarefas relacionadas à compilação de software. Compilar seu código java é apenas uma dessas tarefas. Existem muitos outros, como copiar arquivos, configurar servidores, montar zips e jars e compilar outros idiomas, como C.

Você não precisa do Ant para compilar seu software. Você pode fazer isso manualmente como na escola. Outra alternativa ao Ant é um produto chamado Maven. Ant e Maven fazem a mesma coisa, mas de maneiras bem diferentes.

Consulte Ant e Maven para obter mais detalhes.


Você também pode ver o que o ant está realmente fazendo consultando o arquivo de compilação (provavelmente chamado build.xml). Mesmo se você não estiver familiarizado com a sintaxe, poderá ver o que está acontecendo. <javac> significa que está compilando algum código Java. <java> significa que está realmente executando o código compilado. Provavelmente é a criação de um diretório para colocar os arquivos .class em, compilar o código, talvez criando algumas Javadoc, etc.
MatrixFrog

4
  • Build é uma versão compilada de um programa.
  • Compilar significa converter (um programa) em um código de máquina ou em um nível inferior, no qual o programa pode ser executado.

Em Java : Build é um ciclo de vida contém uma sequência de fases nomeadas.

por exemplo: o maven possui três ciclos de vida da construção, o seguinte é o defaultciclo de vida da construção.

validate - validate the project is correct and all necessary information is available
compile - compile the source code of the project
test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
package - take the compiled code and package it in its distributable format, such as a JAR.
integration-test - process and deploy the package if necessary into an environment where integration tests can be run
verify - run any checks to verify the package is valid and meets quality criteria
install - install the package into the local repository, for use as a dependency in other projects locally
deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

1

No Eclipse e no IntelliJ, o processo de construção consiste nas seguintes etapas: limpeza dos pacotes anteriores, validação, compilação, teste, pacote,
integração, verificação, instalação, implementação.


0

Compilar é apenas converter o código-fonte em binário, construir é compilar e vincular quaisquer outros arquivos necessários no diretório de construção

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.