2014-12-18 4 views
3

javac, 예를 들어 --dry-run에 대한 옵션이있어 컴파일러가 실제 컴파일을 수행하지 않고 소스 파일을 구문 분석하고 어떤 파일 (패키지 경로 포함)을 생성 할 것인지 나열 할 수 있습니까?Java 컴파일러에서 생성 할 클래스 파일을 미리 볼 수 있습니까?

$ cat example.java 
package whatever.example; 
class First {} 
class Second {} 
$ javac -d . example.java 
$ find . 
. 
./example.java 
./whatever 
./whatever/example 
./whatever/example/First.class 
./whatever/example/Second.class 

소스 파일이 -d 옵션이 지정되면서 패키지 구조는 생성 된 두 개의 .class 파일로 컴파일되었습니다

이 예를 생각해 보자. 전에 편집하고 싶습니다. 이런 식으로 뭔가 : javac에 대한 이러한 옵션이없는 경우

또는
$ javac --dry-run -d . example.java 
./whatever/example/First.class 
./whatever/example/Second.class 

, 그런 일을 할 수있는 타사 유틸리티가?

+2

그런 옵션에 대해서는 잘 모릅니다.하지만 어쨌든 꽤 많은 작업을 수행해야한다면 임시 디렉토리로 컴파일하지 않는 것이 어떻습니까? –

+0

임시 디렉토리로 컴파일하려면 "결과 구문 분석"이 필요합니다. 결과를 신뢰성있게 만드는 것은 전문 유틸리티를 작성하는 결과를 가져옵니다. 그렇게하기 전에 어떤 옵션이 있는지 알고 싶습니다. – SquidEpps

+1

"파싱 결과"란 무엇을 의미하는지 모르겠다. 디렉토리 트리를 걷고있을 뿐이다. 어떻게 구문 분석이 필요합니까? –

답변

2

이 실제로 컴파일러가 작업중인 모든 작업을 나열

javac -verbose -d . javaclass.java 

을 시도합니다. 결국 패키지 구조로 모든 클래스를 생성 할 수 있습니다.

위의 코드를 통해 컴파일러가 있습니다. 목록의 끝 부분에 아래 출력이 표시됩니다.

[wrote RegularFileObject[.\com\SC\JustTesting.class]] 
[wrote RegularFileObject[.\com\SC\JustTestingSecond.class]] 

다른 옵션이 많이 있습니다. 명령 프롬프트에 입력하면 javac을 입력하면됩니다.

이 정보를 컴파일하기 전에 내가 알 수 있는지 알 수 없습니다.

+0

위대한! 절반의 문제가 해결되었습니다. 그러나 파일을 컴파일하고 씁니다. 이 방법을 끄는 방법은 무엇입니까? 물론 @ Jon Skeet이 제안했듯이 임시 디렉토리로 컴파일 할 수는 있지만 과장된 것 같습니다. 프로그래밍 방식으로 "드라이 런"을 수행하는 방법이 있습니까? – SquidEpps