2013-11-23 3 views
1

저는 지금 자바 프로그래밍 클래스를 사용하고 있으며, 제 첫 번째 실제 프로그래밍 경험입니다 (전에 프로그래밍을했지만). 클래스의 경우 jEdit을 사용하여 프로그램을 작성하고 터미널을 컴파일하고 실행해야합니다 (Mac을 보유하고 있으며 자동으로 컴파일, 실행 및 디버그하는 프로그램은 교육 목적으로 금지됩니다). 처음에는 일이 잘 진행되었지만 며칠 전, 터미널은 컴파일하려고 할 때 QuickSort 프로그램에서 .class 파일을 덮어 쓰지 않았습니다. 코드를 변경하면 코드가 완전히 다르게 보이지만 컴파일하고 실행 한 후에는 변경되지 않습니다. 그러나 다시 컴파일하기 전에 .class 파일을 삭제하면 다음에 실행될 때 변경 내용이 구현됩니다. 나도 내 선생님이이 문제에 대한 정보 나 해결 방법을 찾을 수 없었습니다. (똑같은 일이 나에게 일어날 때까지 3 일 동급생에게 일어났습니다. 그리고 우리는이 수업의 유일한 Mac 사용자입니다.). 누군가가 문제가 무엇인지, 그것을 고치는 법, 문제를 해결하는 방법을 알고있는 누군가를 찾을 수있는 곳을 알고 있다면 정말 고맙겠습니다. 내 프로그램을 컴파일 할 때마다 .class 파일 5 개를 삭제하는 것은 엄청난 고통이며 이미 심각한 문제를 일으켰습니다. 모든 도움을 주셔서 대단히 감사합니다!터미널은 .class 파일을 덮어 쓰지 않습니다.

* 편집 : 나는 맥 OS를 실행하고 X 10.8.5

+3

소스 (및/또는 대상) 디렉토리에 대한 간략한 개요는 물론 실행할 명령을 나열하십시오. – afk5min

+1

단락 ... 다른 사람들이 당신이 작성한 것을 읽으려면, 그것을 쉽게 읽을 수 있도록 노력하십시오. 텍스트의 벽은 많은 잠재적 인 응답자를 되돌릴 것이다. – hyde

+0

나는이 명령을 사용한다. RandomArray 클래스는 무작위 배열을 생성하는 테스트 클래스 일 뿐이며 정렬 프로그램 자체를 호출합니다. 이 클래스를 컴파일하면 (적어도이 문제가 나타나기 전에) 필요한 모든 클래스가 컴파일됩니다 : "cd desktop/programs/multisorter"및 "javac RandomArray.자바 " –

답변

1

컴파일러는 클래스 파일이 최신 상태가 검출에 대해 충분히 똑똑하지, 그래서 수동 javac *.java를 사용하여 모든 것을 다시 컴파일 또는를 사용하도록 지시 Ant과 같은 빌드 도구.


컴파일러의 모든 클래스를 다시 컴파일하지 않는 이유는 '스마트'하고 변경에만 재 컴파일 파일에서 불필요한 작업을 피하려고한다는 것입니다. .class 파일이 일치하는 .java 파일보다 최신 파일 인 경우 이전 컴파일 이후 소스 코드가 변경되지 않았으므로 클래스가 다시 컴파일되지 않습니다.

종속성 체인이 여러 개인 파일이있는 경우 문제가 발생할 수 있습니다. 이 간단한 예제를 고려하십시오 A가 처음으로 컴파일

// file: A.java 
public class A { public static void main(String[] args) { new B().run(); } } 

// file: B.java 
public class B { void run() { new C().run(); } } 

// file: C.java 
public class C { void run() { System.out.println("hello world"); } } 

컴파일러는 차례로 C를 참조하는 B을 참조하는지 본다. 셋 모두 컴파일되고 모두 잘됩니다. B.java이 수정되고 A 다시 컴파일하는 경우

는, 컴파일러는 A 참조 BB.java 이후는 다시 컴파일 B.class보다 새로운 것을 본다. C.java은 변경되지 않았으므로 C은 다시 컴파일되지 않습니다. 모든 것이 여전히 잘됩니다.

그러나 C.java 경우

이 수정되고 A 컴파일러가 AB에 의존한다는 것을보고 다시 컴파일하지만, B.java 이후 다시 컴파일되지 않은 변경되지 않았습니다. 따라서 컴파일러는 C에 도달하지 않으며 C.java이 변경 되었더라도 컴파일되지 않습니다.

+0

정말 고마워요! 방금 내 인생을 훨씬 쉽게 만들어 줬어! –