2009-10-06 2 views
2

나는 이것이 question 1522329의 후속 종류라고 생각합니다.자바 클래스와 그것이 속한 모든 클래스의 빌드를 자동화하는 방법은 무엇입니까?

그 질문은 런타임시 java -verbose : class 옵션을 통해 사용되는 모든 클래스의 목록을 가져 오는 것에 관해 이야기했습니다.

내가 관심을 갖는 부분은 내 수업 (들)이 포함 된 JAR 파일 및 그들이 의존하는 다른 모든 수업을 자동화하는 것입니다. 일반적으로 이것은 제 3 자 오픈 소스 제품의 "클라이언트 로직"의 코드를 사용하지만 깨끗한 클라이언트 API 객체 집합을 제공하지 않은 경우에 해당합니다. 전체 코드 세트는 서버 측에 있지만 필요한 클라이언트 비트 만 있으면됩니다.

이것은 일반적인 문제로 보일 수 있지만이 작업에 도움이되는 항목은 (예 : Eclipse에서) 보지 못했습니다. 내가 놓친 게 있니? 클래스 유형 :/소스 연습/시행 착오/-verbose (내 순수한 감성의 기분을 상하게) 총알을 물고 모든 대규모 JAR에서 타사 코드를 포함 : 물론

나는 아직도하여 수동으로 작업을 수행 할 수 있습니다 (하지만 후자는 내 코드가 J2EE 서블릿의 일부로 실행되는 곳에서 작동하지 않으므로 주어진 Tomcat 웹 응용 프로그램에만 해당되며 이상적으로는 클래스와 관련된 클래스에만 해당됩니다.).

+0

(내 대답은 aperkins의 답변을 참조하십시오.) 빌드 자동화 방법은 그 자체로 문제가 아닙니다. 그것은 내 클래스가 사용하는 제 3 자 클래스의 정확한 집합을 결정하는 방법이다. 그래서 나는 그들에게 "최소한"의 JAR 라이브러리를 만들 수있다. 응답은 다음과 같을 수 있습니다. "이 문제에 대해 걱정하지 마세요. 타사 개발자가 API 클래스를 완전히 분리하지 않은 경우 많이 포함하고 부 풀기를 허용하십시오." 나는 깨끗한 대안이 있다면 단지 관심이 있습니다. –

+0

자세한 내용은 블라디미르 회신에 대한 제 응답을 참조하십시오. 예제 사용 사례는 다음과 같습니다. 서버 측 코드 인 라이브러리가 있지만 클라이언트 측 (또는 서버의 일부가 아닌 코드의 일반 유틸리티)을 사용할 수있는 클래스 세트가 있습니다. 나는 그 클래스 (및 모든 의존성)를 'cleaner'JAR로 추출하려고한다. 나는 실제적으로 ** 실제적으로 ** 필요하기 때문에 이것이 어떤면에서 학문적/미적 관심의 대상임을 반복한다. (글쎄요, 아마도 매우 엄격한 저장소 요구 사항을 가진 임베디드 컨텍스트에서) –

답변

5

Ant 또는 Maven과 같은 빌드 시스템을 사용하는 것이 좋습니다. Maven은 Java를 염두에두고 설계되었으며, 제가 독점적으로 사용합니다. Maven은 어셈블리 플러그인을 사용하여 모든 종속 클래스를 하나의 큰 jar 파일로 어셈블 할 수 있으므로 종속성에 대해 걱정할 필요가 없습니다.

http://maven.apache.org/

편집 : 서블릿에 관한

, 당신은 또한 당신이 당신의 용기와 포장 원하고, 독립 실행 형 응용 프로그램을 만드는 경우에는 jar 툴을 가질 수 종속성을 정의 할 수 있습니다 실행 가능한 jar를 만드십시오.

참고 : 예, 나는 훨씬 더 쉽게 작업 할 수있는 프로젝트를 만들었으므로 Maven 옹호자입니다. 아니요. 프로젝트에서 개인적으로 일하지 않습니다. :)

+0

Ant에서 전환 한 후 수년간 Maven을 사용해 왔습니다. 지금까지 내 의견으로는 최고의 도구. – SingleShot

+0

좋은 조언입니다. (이미 개미를 사용하고 있지만, 말의 XML 구문에 좌절감을 가져서 Maven과 같은 것을 고려할 수는 있지만) 제 질문에는 실제로 대답하지 않습니다. Ant/Maven을 사용하면 빌드 프로세스를 자동화 할 수 있지만, 필자가 요구하는 것은 클래스가 사용하는 정확한 * 클래스 집합을 결정하는 방법이다. 그래서 "최소한의"관련 JAR 파일을 빌드 할 수있다. AFAIK, Ant 작업으로이 작업을 수행 할 방법이 없습니다. 응답은 다음과 같을 수 있습니다. "이 문제에 대해 걱정하지 마세요. 타사 개발자가 API 클래스를 완전히 분리하지 않은 경우 많이 포함하고 부 풀기를 허용하십시오." –

+0

걱정 하시겠습니까 _ _ 있습니까? 자바를 이미 사용하고 있습니다. 클래스 확장에 대해 걱정하는 것은 어리석은 일입니다. –

1

당신이 원하는 것은 당신이 의존하는 수업을 포함 할뿐만 아니라 당신이 의존하는 수업도 의지합니다. 등등.

그래서 실제로 빌드 문제는 아니지만 의존성 문제가 더 많습니다. 질문에 대답하기 위해 Maven (분명히) 또는 Ant + Ivy로이 문제를 해결할 수 있습니다.

필자는 Ivy와 함께 작업하며 Ant Jar 작업의 zipgroup 파일 세트 기능을 사용하여 "ueber-jar"를 빌드하기도합니다. 별로 우아하지는 않지만 10 초 안에 완료됩니다 .-)

+0

답장을 늦추는 데 3 년 밖에 걸리지 않습니다.이 답변을 +1 하겠지만, 아이비가 볼 수있는 것에서는 문제가 해결되지 않습니다. Ivy는 여전히 종속성을 설명하기 위해 메타 데이터가 필요하며 종속성은 여전히 ​​라이브러리/JAR 수준에 있습니다. 내가 원했던 것은 ** 기존 JAR ** 내부의 클래스들에 대해 정의 된 개별 클래스들의 세트로부터 새로운 JAR을 생성 할 수 있고 ** 모든 내부 ** 의존성 (** 외부 ** 의존성은 남아있을 수있다. 전체 JAR로 ** ** 약간의 바보 같은/항문 (그리고 그들에 종속 된) 클래스를 추출하는 ** 것입니다. –

2

ProGuard을보세요.

ProGuard는 무료 Java 클래스 파일 축소 기, 옵티 마이저, obfuscator 및 사전 검증 도구입니다. 사용되지 않는 클래스, 필드, 메소드 및 속성을 감지하고 제거합니다. 바이트 코드를 최적화하고 사용되지 않는 명령어를 제거합니다. 짧은 의미없는 이름을 사용하여 나머지 클래스, 필드 및 메서드의 이름을 바꿉니다. 마지막으로, Java 6 또는 Java Micro Edition 용 처리 코드를 사전 검증합니다.

+0

작동하는 것처럼 보이지만 확실하게 더 많은 '주류'솔루션이 있습니까? 더 조사 할 시간이 없으므로 이것을 대답으로 확실히 받아 들여야합니다. 죄송합니다 :-( –

관련 문제