2008-10-03 2 views
11

큰 자바 프로그램을 만들기위한 make 유틸리티를 찾고 있습니다. 이미 ANT를 알고 있지만 사용 가능한 다른 것을보고 싶습니다.좋은 Java make 유틸리티는 무엇입니까?

이상적으로 GNU Make를 파탄시키는 .java ->. class 패키지 디렉토리의 이상한 점을 처리 할 수 ​​있어야합니다.

Win32이지만 크로스 플랫폼은 플러스입니다.

편집 : 내가 아마 어쨌든 그것을 사용하게 될 겁니다하지만 작동해서, 다른 옵션을보고 싶어 왜 ANT를 사용하는 몇 가지 단점을 볼 .

  • 은 중요한 XML 메이크 파일을 필요로합니다. "HelloWorld"는 이미 25 줄이고, 더 합리적인 프로그램은 빠르게 커집니다.
    • 개미집은 개괄적으로 모든 Java 명령을 실행하는 큰 .bat 파일과 거의 동일한 개미 build.xml 파일의 비교를 보여줍니다. http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html, 이미 그 중 하나가 있습니다.
    • Xml은 모든 종속성, 변수, 대상, 규칙 및 프로젝트에 추가 크 러프 트가 있음을 의미하므로 라인을 읽기 어렵게 만듭니다. The Angle Bracket Tax
  • 은 나에게 잘못된 모든 문제를 해결합니다.
    • 개미는 jar 및 javac 명령 줄을보다 쉽게 ​​작성하고, .java 소스 파일을보다 쉽게 ​​지정하고, jvm/java 속성을 더 쉽게 지정하고, 사용자 정의 빌드 도구를 더 쉽게 작성하도록합니다.
    • 개미는 자바 클래스 종속성을 더 쉽게 만들지 않으며보다 강력한 변수 시스템을 가지지 않는 것 같습니다. 일반적으로 make 유틸리티로 해결됩니다.

나는 GNU 메이크업을 사용 싶지만, 패키지 선언 .java가 파일에 대한의 .class 파일이 결국 어디로 그것을 알아낼 수 없습니다.

답변

4

새 프로젝트를 시작하는 경우 maven을 살펴볼 수 있습니다. 그것은 다소 어려움이 있지만, 의존성을 포함하여 많은 것들을 처리합니다.

에 대해 빌드 파일 을 만들려는 프로젝트가 이미있는 경우 위의 개미와 별개로 권장 사항이 없습니다.

2

이 질문에 대한 답변이 많지 않습니다. ANT는 Java를 빌드하는 표준 방법입니다. Java, 무수히 많은 Java 도구 및 Cruise Control과 잘 작동합니다. 그런데 왜 다른 것을 시도하고 싶습니까?

ANT가 다루지 않는 엣지 케이스가 아니라면 ANT를 사용하는 것이 좋습니다. 물론

내 태도는 바보, 왜 대안을 찾고에 대한 좋은 경우가 이유를 지적하기보다 지식이있는 사람에 대한 드리겠습니다)

+1

ANT는 지나치게 무겁고 XML은 총체적이며 모든 것을 다시 작성하지 않도록하는 것은 불가능합니다. – wnoise

+0

Ant는 모든 것을 빌드하는 명령을 제공하지만, javac가 충분히 똑똑하지 않기 때문입니다. 물론 XML은보기 흉하지만 필자가 원치 않는다면 보지 않아도된다. 내 IDE가 처리하도록 할 수있는 옵션이 있거나 내가 선택한 경우 사용자 지정할 수 있습니다. –

+2

그래서 기본적으로 개미의 장점은 당신이 그것을 볼 필요가 없으며 프로젝트를 지능적으로 실제로 구축 할 필요가 없다는 것입니다. 솔직히, 나는 대본으로 그렇게 할 수있다. – davenpcj

2

하나는 다른 당신이 뭔가를 원하는 scons 경우 꽤 경량. 나는 그것을 조금 사용했고 이해하기 쉽다는 것을 알았다. 특히 이미 파이썬 구문을 알고 있다면 더욱 그렇다.다른 옵션은 maven이지만 어떤 경우 든 간단하게 이 아니며이 아닙니다. 그러나 문서 관리와 같은 많은 추가 기능을 제공합니다. 그러나 대체로 그것을 대체하지는 않을 것입니다.)

0

분명히 고전적인 make (make, gmake, nmake) 유틸리티가 있습니다. 루비로 작성된 시스템도 있습니다. 파이썬. 그것들은 Java에 특화된 것이 아니라 스크립팅이 가능한 빌드 시스템입니다.

하지만 ANT는 8-9 년을 앞서가는 팩의 리더였으며 기초적인면에서 시작하기가 매우 쉽습니다.

자바 스크립트 컴파일러는 각 파일에 대해 javac 컴파일러를 개별적으로 호출했기 때문에 당황한 날입니다. ANT는이 문제로 고통받지 않으며, 아마도 make가 그렇게하지 못하도록 수정 될 수 있습니다. 하지만 그것은 ANT의 요소 중 하나였습니다. 그것은 단지 빠르다.

ANT가 완벽한 솔루션이 아닐지는 모르지만 실용적입니다.

+0

GNU Make는 프로그래밍 방식으로 빌드 할 수있는 + target 구문을 사용하여 한 번에 여러 파일을 빌드하라는 명령을받을 수 있습니다. 또한 변경된 소스 파일 만 재 구축하는 라이브러리와 같은 대상을 지정할 수 있지만 모두 한 명령 줄에 있습니다. – davenpcj

+0

대부분의 다른 make 유틸리티와 마찬가지로 동일합니다. – davenpcj

4

ANT !!

Apache Maven 당신이 나에게 묻는다면 갈 길입니다.

내가 가장 좋아하는 기능은 종속성 관리에 내장되어 있습니다. 즉, 타사 JAR을 소스 제어 프로젝트로 확인하지 않아도됩니다.

종속성을 maven POM (프로젝트 객체 모델 - 기본적으로 프로젝트의 XML 설명)에 지정하면 maven이 자동으로 다운로드하고 컴파일하며 앱과 패키지화합니다.

다른 멋진 기능은 다음과 같습니다. 릴리스 관리 및 배포 게시 - maven 콘솔 명령을 사용하여 릴리스를 수행합니다. 이 기능은 소스 코드에서 코드베이스에 태그를 지정합니다. 깨끗한 사본을 체크 아웃하고 배포 용으로 & 패키지로 만듭니다. 두 번째 명령은 다른 최종 사용자에게 배포 할 수 있도록 저장소에 업로드합니다.

이미 많은 사람들이 사용하고있는 라이브러리 중 저장소가 많습니다. - 모든 Apache 프로젝트는 maven을 사용합니다. 더 많은 LOADS가 탑승 중입니다. See for yourself, here's the main repo

나만의 repo를 호스팅 할 수 있습니다. - 당신이 빌드 자신을 해제하고 또한

+1

가치있는 일을하고 있다면, Maven으로 자신의 저장소를 호스팅해야합니다. 그렇지 않으면 여러 단일 실패 지점 (다른 사람의 저장소)이 있습니다. 또한 Maven의 설명서가 부족합니다. –

+1

그것은 거친 모서리를 가지고 있지만, 결국에는 최고의 Java 빌드 도구/종속성 관리자가 될 수있는 것으로 나타났습니다. 만약에 maven이 아니라면, 나는 언젠가 java에 의해 화를 냈을 것입니다. – Benson

0

내가 Maven 2Ant 변환 이후 다시 못 봤어 (대부분의 일 단지 등) 기타 공공의 repos에 존재 그나마 JAR 파일을 업로드 할 수 있습니다 곳. 개미와 메이븐 (Ant and Maven) 건물의 두 가지 다른 방법. 개미와 함께 물건을 만드는 방법에 대한 지침을 제공하고 있습니다. 반면 Maven 2를 사용하면 원하는 것을 만들 수 있습니다. 기존의 Ant build, xml을 가지고 있다면, Maven 2 pom.xml에서이를 리핑하여 빌드를 리팩터링하는 첫 걸음을 내딛을 수 있습니다.

6

개미와 메이븐은 분명히 두 가지 표준입니다. Ant에 이미 익숙하고 Maven과 함께 제공되는 종속성 관리를 원하면 Ivy을 살펴보십시오.

Ant와 Maven이 부족한 것은 빌드 스크립트에서 실제 제어 구조입니다. 이 컨트롤 중 일부를 제공하는 Ant 용으로 다운로드 할 수있는 플러그인이 있지만 다시 Ant에 익숙하다면 Ant의 Groovy 래퍼 인 Gant을 살펴보십시오.

+0

간트가 꽤 좋아 보인다. 나는 그것을 조사 할 것이다. – davenpcj

1

jmk. 원시적이지만 크기가 작기 때문에 소스 .tar.gz 파일에 임베드하고 크기를 간신히 변경할 수 있습니다.

+0

JMK를 보았지만 make를 대체하기로되어 있는지 또는 make가 일반적으로하는 것보다 java로 지능적인 일을하는지 알 수 없습니다. 어떤 경험이 있습니까? – davenpcj

+0

이것은 make를 직접적으로 대체하고 비슷한 기능을 가지고 있습니다. 디렉토리 문제를 해결하려면 Java 소스 코드를 파싱해야합니다. – finnw

+0

오른쪽. C 컴파일러의 경우 종속성을 올바르게 생성하는 인수가 있으며 빌드와 동일한 방법으로 경로를 해석합니다. 이상적으로 javac도 같을 것이다. – davenpcj

1

메이븐 정말 최근에 개선되지 않는 한, 나는 그것을 잘 놀지 것입니다. 당연히 gazillion 의존성을 지닌 괴물 "multi-project"가 없다면 말입니다.

가장 단순한 일을 시도 할 때 (서버에 파일 war과 같은 파일) 시도 할 때 완전히 쓸모없고 도움이되지 않는 오류를 보았을 때 아파서 Maven이 버리고 Ant가 더러워졌습니다. 그 이후로 나는 회고하지 않았다.

0

ant4eclipse와 함께 ant를 사용하고 싶습니다. 이것은 내가 이클립스에서 종속성을 설정하고, 개발 빌드 및 일식 테스트를 수행하고, 개미를 사용하여 연속 빌드를 수행 할 수있게한다.

+0

그건 좋은 해결책이지만, 더 독립형을 선호합니다. – davenpcj

0

나는 ANT를 항상 사용합니다. 이것은 내가 자바 웹 툴킷 (GWT)을 사용하여 웹 애플리케이션을 개발했기 때문에 클라이언트 측 자바를 자바 스크립트로 컴파일하는 추가 단계가 있기 때문입니다. 개미와 함께, 내가 알아야 할 것은 GWT가 어떻게 작동하는지 그리고 내가 직접 빌드를 조정한다는 것이다. 메이븐과 함께 누군가가 플러그인을 쓸 때까지 기다려야합니다. 또는 나는 나 자신을 쓴다. 일반적인 규칙을 따르지 않는 다른 프레임 워크와 도구가 나타날 가능성이 있습니다. 나는 항상 maven 플러그인을 계속 찾아야 만한다. 개미와 함께, 나는 내가 원하는대로 투명하게 할 수있다. 나는 또한 writting xml 파일을 즐긴다. (나는 여러 web.xml, application.xml, persistence.xml, SqlMap.xml, dataset.xml 등을 써야하기 때문에해야만한다. 내 포인트 _ XML은 당신이 좋아하는 것을 배워야 만 한 가지다.)

2

개미 년 동안 지도자가되었습니다. 하지만 그것의 build.xml은 XML 기반이기 때문에 은 매우입니다. 종속성 관리는 ivy과 결합하여 수행 할 수 있습니다.

maven은 개미 + 아이비 (an + ivy) 탠덤이 제공하는 것을 즉시 제공하기 위해 노력하지만 작동하는 동안 좋습니다. 만약 그 일을 멈추고 의존성 관리가 엉망이되는 것을 알아 내야 만한다면, 그것은 당신이 상상할 수있는 최악의 상황 일 것입니다. 또한 그것은 pom.xml입니다 ... xml로 작성되었습니다.

sbt은 로얄 스칼라 빌드 도구이며, 종속성 관리에 아이비 (ivy)를 사용하며 빌드 파일은 스칼라 DSL로 작성됩니다. 매우 성숙하지만 스칼라 방언은 당신이 좋아하지 않을 수도 있습니다.

buildr 빌드 파일은 루비로 지정됩니다. Maven 리포지토리와 호환되며 자체 종속성 관리를 제공합니다. 개미 통합도 거기에있다.

gradle은 그 빌드 파일에 groovy를 사용합니다. Maven 또는 Ivy 지원 옆에는 이전에 아이비를 사용하고 만족스럽지 않은 자신의 의존 관리자가 있습니다. 원활한 개미 통합. 훨씬 쉬운 구문을 가지고 있습니다.


개미, 아이비, 메이븐, buildr는 아파치 프로젝트입니다.


TL; DR

체크 gradle 또는 buildr.

+0

매우 포괄적 인 목록이 좋습니다. 감사합니다. 나는 gradle과 아마도 sbt를 잠시 살펴볼 것입니다. – davenpcj

관련 문제