2009-06-09 3 views
9

Groovy를 기반으로 Ant에 대한 대안을 찾지 못했습니다. AntBuilder는 Eclipse 내에서 작동하지 않으며 Eclipse 용 Groovy 플러그인은 실망 스럽습니다. Gradle은 아직 준비가되지 않았습니다.build.xml을 Build.java로 바꾸기 - Java와 Ant 라이브러리를 빌드 시스템으로 사용하기

Ant 설명서에는 Java 코드의 Ant 라이브러리를 사용하는 방법에 대한 정보를 제공하는 "Ant 외부의 Ant 작업 사용"절이 있습니다. 또 다른 예는 여기있다 : 그것은 Build.java으로 build.xml 파일을 대체 할 간단한데 이론적으로

http://www.mail-archive.com/[email protected]/msg16310.html

. Ant 문서는 발견해야 할 일부 문서화되지 않은 종속성을 암시합니다 (자바에서 Ant를 사용하는 관점에서 문서화되지 않았습니다).

앤트 스크립팅에 실망한 수준이 주어지면 왜 이것이 전에 수행되지 않았는지 궁금합니다. 아마 그것은 좋은 빌드 시스템을 가지고 있으며 그렇지 않습니다.

누구나 Ant 라이브러리를 사용하여 Java로 빌드 파일을 작성하려 했습니까?

+0

아직 Gradle을 사용할 준비가되지 않은 이유는 무엇입니까? – tronda

+0

+1 나는 이것을 또한 고려하고있다. 개미 스트레이트 자켓이 피곤해. – amarillion

+0

여기에 관심이 있으신 분께는 더 자세한 정보가있는 광범위한 토론이 있습니다 : http://ant.1045680.n5.nabble.com/Replacing-build-xml-with-Build-java-Doing-Ant- 직접 빌드 -from-Java-td1354956.html – ricosrealm

답변

7

우리의 빌드 시스템은 주로 사용자가 설명하는 것을 기반으로하며, 실제로 잘 작동합니다. 규칙 기반 응용 프로그램 모듈 레이아웃 자동 검색을 사용하여 응용 프로그램을 어셈블하는 사용자 정의 Java 프로그램에서 Ant 작업 (특히 파일 조작 작업)을 사용합니다.

은 빌드 스크립트 자체를 컴파일하는 것과 같은 작업을 수행하고 빌드를 수행하기 위해 실제로 자바를 호출하기 위해 Ant XML을 사용해야하지만 사소한 문제입니다.

특히 조건부 실행과 관련하여 Java가 Ant보다 더 읽기 쉬울뿐만 아니라, 속도가 훨씬 빠릅니다. 우리의 Ant 기반 빌드는 EAR을 어셈블하는 데 1 분 정도 소요되었지만 이제 Java 기반 버전은 약 5 초가 걸립니다.

+0

예 , 나는 작은 Ant 스크립트를 사용하여 Build.java를 빌드하고 실행하는 것이 어디에서 편리한 지 알 수있었습니다. build.xml에서 다른 인수를 "java Build arg1 arg2 ..."에 전달할 수 있습니다. 더 큰 build.xml에있는 다른 대상에 해당합니다. 사용할 때 문서화되지 않은/예기치 않은 종속성을 찾았습니까? Java의 Ant, 즉 Target 객체가있는 프로젝트가 필요합니까? –

+0

예, 개미 작업에는 일정량의 배관이 필요하지만 쉽게 스푸핑 할 수 있습니다. 우리는 우리가 사용하길 원하는 각각의 Ant 태스크의 서브 클래스를 작성하여 빌드 "스크립트"를 사용하기에보다 편리하고 유동적 인 API를 제공하고 프로젝트와 같은 것들을 주입하는 메커니즘을 숨 깁니다. 우리에게 어떤 문제가 생겨서도. – skaffman

+1

훌륭한 사운드. 오픈 소스에 대한 계획이 있습니까? 아니면 최소한 빌드 시스템에 대한 상위 수준의 개요를 제공합니까? –

0

내가 그럴 수 있다고 생각하는 동안 쉘 스크립트를 사용하는 것이 더 좋을 것입니다. 그리고 빌드를 자동화하는 자바 프로그램 전체를 작성하는 것이 좋습니다.

쉽게 지정할 수있는 파일 세트이고 속성을 읽기 쉽도록하는 ant의 주요 용도 중 하나에서 누락되었습니다.

Groovy가 실제 응용 프로그램을 작성하기에 전체 응용 프로그램을 작성하기에는 너무 가까워서 개미와 만났습니다. 문제가 너무 복잡합니다.

+0

가끔 Ant build.xml 파일이 자신의 하위 프로젝트가되는 경우가 있습니다. 빌드는 복잡 할 수 있으며 xml에 너무 복잡 할 수 있습니다. –

2

Java가 컴파일 된 것을 감안할 때, 이것은 닭고기 및 계란 문제의 일종입니다. 프로젝트를 빌드하려면 Build.java를 빌드해야합니다.

Ant는 현재 BeanShell, Groovy 및 기타 여러 기능을 사용하여 인라인 스크립팅을 지원하므로 실제로 그 필요성을 줄이는 데 도움이됩니다.

편집 : Dean의 여러 의견에 대한 답변으로, 빌드가 엄격하게 긴 절차로 구성된 경우 실제로는 개미 빌드 스크립트가 필요하지 않습니다. 그러나 빌드 스크립트의 강력 함은 종속성이 여러 번 진입 점을 허용하면서 한 번만 실행된다는 것을 보증한다는 것입니다.

XML 형식이 마음에 들지 않으면 혼자가 아니며 ANT 작성자는 귀하와 동의합니다. 그러나 빌드 프로세스에 대한 귀하의 견해를 유일한 출발점으로 IDE에서 시작할 수 있다면, 빌드 요구 사항이 매우 간단하다고 말할 수 있습니다.

EDIT2 : 나는 그 질문에 직접적으로 말하기 때문에 skaffman의 답변을 반대했다. 주석에서 절차 적 빌드에서는 접근 방식이 좋지만 선언적 방식에서는 작동하지 않는다는 것에 동의하는 듯하며 닭고기를 피하기 위해 Build.java로 공을 굴리는 데 최소한 ANT xml이 필요합니다. 계란 문제. 그것은 그 문제의 요점에 도달하는 것 같습니다.

+0

닭고기 및 계란에 문제가 없습니다. Eclipse 내에서 또는 사용하는 IDE에 관계없이 Build.java를 빌드하고 실행하십시오. Ant

2

좋은 아이디어가 있습니다.절벽 누르기도 비슷한 생각이었습니다 : http://blogs.azulsystems.com/cliff/2008/01/i-hate-makefile.html

당신이 그것을 끝까지 간다면 가능한 한 간단하게 지켜서 빌드 시스템이 빌드 시스템 자체를 필요로하지 않도록하는 것이 좋습니다.

+0

주어진 프로젝트에 대한 build.xml 파일보다 Build.java 파일이 더 없어야합니다. 대부분의 경우 최상위 수준의 Build.java가 있습니다. 내 개념은 xml 파일 대신 Java에서 Ant를 사용하는 것이다. –

+0

Cliff의 블로그 링크가 끊어졌지만 Cliff의 github에서 build.java를 찾았습니다. https://github.com/edwardw/high-scale-java-lib/blob/master/build.java –

2

중요한 점은 여기에서 잃어버린 것 같습니다.

개미는 자바로 작성되었으며, Ant를 사용하는 것이 Ant 라이브러리의 API를 사용하는 더 좋은 방법입니다. 내 인생에서 Java를 호출하기 위해 xml을 사용하는 것이 Java를 호출하기 위해 Java를 사용하는 것보다 더 좋거나 더 쉬울 것이라고 생각하지 않습니다.

하나의 장애물은 XML 접근법이 문서화되어있는 반면 Java 접근법은 문서화되어 있지 않으므로 Ant 코드를 다운로드하고 익숙해 져야한다는 것입니다.

나는이 질문을 게시하는 것으로부터 몇 주간을 보류했다. 누군가 이전에이 일을하고 내 Google-foo가 개선되어야한다고 확신했기 때문이다. xml 대신 Ant API를 호출하기 위해 Java를 사용하는 것이 당연한 것처럼 보입니다. Ant와 XML 접근 방식을 위해 개발 된 병렬 Java 기반 접근 방식이 없다는 사실에 여전히 놀랐습니다.

분명하기 때문에 누군가가 이전에 해냈다는 것을 의미하지는 않습니다.

+0

누군가 이전에 해 봤습니다. 그것은 Ant라고 불린다.) – GreenGiant