2016-07-13 2 views
1

초기 Java 버전에서 가능했던 클래스 파일에 소스 코드를 추가하려고했기 때문에 클래스 파일 형식을 검사했지만 SourceFile 특성과 SourceDebug 특성 만 발견했습니다. 나는 포스트 프로세싱 파이프 라인을 쉽게하기 위해 클래스 파일과 함께 묶을 클래스의 완전한 소스 코드를 찾고 있었다.Java : 소스 코드가 포함 된 클래스 파일?

내 기억이 잘못되었거나 클래스 파일 내에서 클래스의 전체 소스 코드를 묶어서 어떻게 묶을 수 있는지 알 수 있습니까? 그래서 소스 코드를 확인할 때 자바 파일을 찾지 않아도됩니다. ?

컴파일러 스위치가 있습니까?

Javac에는 추가 디버그 정보를 추가하는 -g 옵션이 있습니다. 누군가가 내가 추가 한 정보가 무엇인지 말해 줄 수 있습니까? -g 스위치가 없으면 코드 색인 및 소스 파일 정보 행을 생성합니다.

내가 가진 주요 문제는 클래스 파일을 생성하지만 변경 될 수있는 소스 파일에 대한 참조 만 있습니다. 나는 단순히 소스와 클래스 파일을 번들링하기를 원한다.

maven에서는 모든 소스 파일을 대상 디렉토리로 복사 할 수 있지만 Eclipse, IntelliJ 및 NetBeans IDE와 호환되지 않을 수 있습니다.

+3

소스와 클래스를 병에 묶을 수 있다고 생각합니다. –

+0

maven을 사용하는 경우 매우 간단합니다. [link] (https://maven.apache.org/plugin-developers/cookbook/attach-source-javadoc-artifacts.html). 소스 코드는 독립적으로 다운로드 할 수있는 별도의 jar 파일에 번들로 제공됩니다. 제 자신의 경험으로 말하면이 일식은이 기능을 잘 통합합니다.항아리에 직접있는 것처럼 외부 항아리의 소스 코드를 볼 수 있습니다. – martinhh

+0

하지만 기본적으로 Java 소스를 클래스 파일에 직접 추가하는 간단한 방법은 없습니다. –

답변

0

하나의 가능한 해결책은 원본을 포함하는 새로운 클래스 파일 특성 (합법적 인)을 정의하는 것입니다. 클래스 파일과 비교할 때 소스가 크기 때문에 내용이 가장 잘 압축 될 수 있습니다 (1 : 5에서 1:10 비율로 나타남).

이렇게하면 클래스 파일과 소스가 번들로 유지됩니다.

JVM 사양은 모든 JVM/도구가 알 수없는 속성을 무시해야 함을 보장합니다.

컴파일 중에 소스가 수정되지 않았는지 확인한 후 컴파일 프로세스를 다시 실행하고 소스 코드를 클래스 파일 속성으로 추가 한 후 javac 응용 프로그램의 래퍼에 투자합니다.

Eclipse의 IDE 빌드주기 (이는 IntelliJ 및 NetBeans)와 호환되지 않으므로 특별 사후 프로세서가 필요합니다.

그래서 통합을 위해서는 JavaBuilder에 대한 대안이 필요합니다.

일단 소스 코드가 문제의 클래스 파일에 첨부되면 코드 유지 및 관리에 도움이되는 많은 고급 기능을 매우 쉽게 수행 할 수 있습니다. 저에게있어 소스 코드와 클래스가 함께 있어야하며 소스 정보는 컴파일 된 소스 코드와 100 % 동일해야합니다.

0

디 컴파일러를 사용하면 유용한 소스 코드 표현을 추출 할 수 있습니다. 대부분의 디 컴파일러가 코드 정보 라인을 평가하고 그에 따라 소스 코드 내에서 디 컴파일 된 구조를 배치하기 때문입니다.

일부 시나리오에서는 char 수준의 주석에 대한 액세스와 char에 대한 올바른 표현이 필요하기 때문에 디 컴파일러는 2 차 속도 솔루션입니다.

관련 문제