빌드 및 컴파일 (Java)


138

이것에 대한 대답은 매우 분명하지만 여기에 있습니다.

학교 (자바)를위한 작은 프로젝트를 진행할컴파일 합니다.

내 차장에서 우리는 프로젝트 를 빌드 하기 위해 개미를 사용 하고 있습니다.

컴파일은 건물의 일부라고 생각합니다. 이 올바른지? 빌드와 컴파일의 차이점은 무엇입니까?

관련 :
컴파일 및 빌드의 차이점은 무엇입니까?

답변:


229

"빌드"는 소프트웨어의 "제공 가능"을 작성하는 데 필요한 모든 단계를 포함하는 프로세스입니다. Java 세계에서는 일반적으로 다음이 포함됩니다.

  1. 소스 생성 (때로는).
  2. 소스 컴파일
  3. 테스트 소스 컴파일
  4. 테스트 실행 (단위 테스트, 통합 테스트 등)
  5. 포장 (병, 전쟁, ejb-jar, 귀에).
  6. 상태 점검 실행 (Checkstyle, Findbugs, PMD, 테스트 범위 등과 같은 정적 분석기)
  7. 보고서 생성

보시다시피, 컴파일은 빌드의 작은 부분 일뿐입니다 (그리고 가장 좋은 방법은 Maven 또는 Ant와 같은 도구를 사용하여 모든 단계를 완전히 자동화하고 Continuous Integration으로 알려진 빌드를 지속적으로 실행하는 것입니다 ).


2
"연속 빌딩"대신 "연속 통합"이라고 부르는 이유는 무엇입니까?
Quazi Irfan

@Pascal, Re "빌드 계속 실행" .. " 빌드 "는 무엇을 의미합니까?
Pacerier

4
@Pacerier "빌드"는 모든 단계 1.-7을 나타냅니다.; "연속적으로"는 첫 번째 빌드가 완료된 직후 다음 빌드를 시작하는 것이 아니라 프로젝트 변경시에만 시작한다는 의미입니다.
michelek

그리고 첫 번째 포인트에서 언급 한 것처럼 소스를 생성 할 때 (소스 생성 (때로는))
Deepak Gupta

42

내가 볼 수있는 답변 중 일부는 맥락이 맞지 않으며 이것이 C / C ++ 질문이라면 더 의미가 있습니다.

짧은 버전 :

  • "컴파일"은 .java 파일을 .class 파일로 변환합니다
  • '빌딩'은 컴파일 및 기타 작업을 포함하는 일반적인 용어입니다.

"빌딩"은 컴파일을 포함하는 전체 프로세스를 나타내는 일반적인 용어 입니다. 예를 들어, 빌드 프로세스에는 Java 코드 또는 문서 파일을 생성하는 도구가 포함될 수 있습니다.

모든 .class 파일을 가져 와서 .jar에 넣는 "package"또는 .class 파일과 임시 디렉토리를 정리하는 "clean"과 같은 추가 단계가있을 수 있습니다.


32

컴파일 은 소스 코드를 객체 코드로 변환하는 작업입니다.

링크 는 객체 코드와 라이브러리를 원시 실행 파일로 결합하는 작업입니다.

빌드 는 설치 및 생성과 같은 다른 작업과 함께 컴파일링크 로 구성된 시퀀스 입니다.

많은 컴파일러가 소스 코드를 컴파일 한 후 링크 단계를 자동으로 처리합니다 .

컴파일 코드와 실행 코드의 차이점은 무엇입니까?


다른 가능한 작업 : 향상 (JDO), Javadocing, 패키징 및 서명. 또한 "빌드"의 일부로 자동화 된 단위 / 회귀 테스트 실행을 포함한 일부 환경.
Bert F

일반적으로 Java 프로젝트를 빌드 할 때 링크 단계가 없으며 원시 실행 파일이 생성되지 않습니다. 오히려 컴파일 된 클래스는 빌드의 일부로 .jar 파일로 함께 패키지됩니다. (또는 대상 환경에 따라 .war 또는 .ear)
markusk

1
"원시 실행 파일"이란 무엇입니까?
ealeon

기본적으로 쓸모없는 비트 백은 필요한 다른 라이브러리와 섞이지 않고 자체적으로 사용됩니다. 초콜릿 케이크와 매우 흡사합니다. 밀가루와 계란 등이 없으면 코코아는 생 코코아입니다.
Kaili

9

간단한 말로

컴파일은 Java 코드 (사람이 읽을 수있는)를 바이트 코드로 변환하므로 가상 머신이이를 이해합니다.

빌드는 컴파일 된 모든 부분을 모아서 실행 파일을 작성 (빌드)합니다.


당신이 말하는 것은 "통역"입니다 ... 컴파일은 인간이 읽을 수있는 코드를 기계어 코드로 바꾸는 것입니다
mortsahl

@Tom, "실행 가능"또는 " jar 실행 가능"을 의미합니까?
Pacerier

4

실제로 당신은 같은 일을하고 있습니다. Ant는 소프트웨어 컴파일과 관련된 광범위한 작업을 수행 할 수있는 XML 구성 파일을 기반으로하는 빌드 시스템입니다. 자바 코드를 컴파일하는 것은 그러한 작업 중 하나 일뿐입니다. 파일 복사, 서버 구성, zip 및 jar 조합, C와 같은 다른 언어 컴파일과 같은 다른 많은 것들이 있습니다.

소프트웨어를 컴파일하기 위해 Ant가 필요하지 않습니다. 학교에서하는 것처럼 수동으로 할 수 있습니다. Ant의 또 다른 대안은 Maven이라는 제품입니다. Ant와 Maven은 모두 똑같은 방식으로 작동하지만 상당히 다른 방식으로 수행됩니다.

자세한 내용은 AntMaven 을 검색 하십시오.


또한 빌드 파일 (대부분 build.xml이라고 함)을 보면 개미가 실제로 무엇을하고 있는지 확인할 수 있습니다. 구문에 익숙하지 않더라도 무슨 일이 일어나고 있는지 알 수 있습니다. <javac>는 일부 Java 코드를 컴파일하고 있음을 의미합니다. <java>는 실제로 컴파일 된 코드를 실행하고 있음을 의미합니다. 아마도 그것은 .class 파일을 넣을 디렉토리를 만들고, 코드를 컴파일하고, Javadoc 등을 생성 할 수 있습니다.
MatrixFrog

4
  • 빌드 는 프로그램의 컴파일 된 버전입니다.
  • 컴파일 은 프로그램을 실행할 수있는 기계 코드 또는 하위 레벨 형식으로 변환 (프로그램)하는 것을 의미합니다.

Java에서 : 빌드는 수명주기에 명명 된 단계 시퀀스를 포함합니다.

예를 들어 : 빌드 수명주기가 3 개인 경우 다음은 default빌드 수명주기입니다.

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

Eclipse 및 IntelliJ에서 빌드 프로세스는 다음 단계로 구성됩니다. 이전 패키지 정리, 유효성 검증, 컴파일, 테스트, 패키지,
통합, 확인, 설치, 배치.


0

컴파일은 소스 코드를 바이너리로 변환하고 빌드는 컴파일하고 필요한 다른 파일을 빌드 디렉토리에 링크합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.