2011-02-06 3 views
3

Java에서 javac 및 패키지에 관한 빠른 질문이 있습니다. "java program"(패키지 이름없이)을 사용하여 클래스를 컴파일하려면 어떻게해야합니까?

내가 간단한 프로그램이 다음 디렉토리에 현재 인 (우리는 Program.java 전화 할게) :

  • myRepository/myProgram
  • Program.java 및 기타 된 .java에서

myRepository/myProgram 디렉토리의 파일은 package myProgram.*으로 선언되었으며 import myProgram.*;도 포함되어 있습니다.

그래서 javac myProgram/Program.java을 입력하면 올바르게 컴파일되고 java myProgram/Program을 입력하면 정상적으로 실행됩니다.

그러나 소스 파일이있는 myRepository/myProgram이 아닌 myRepository 디렉토리에서 .class 파일을 생성하려고합니다. 나는 myRepository 디렉토리에 .class 파일을 생성 javac myProgram/Program.java -d ..을 시도했지만 나는 "자바 프로그램"을하려고 할 때, 그것은 나에게 다음과 같은 오류 제공 :

Exception in thread "main" java.lang.NoClassDefFoundError: Program (wrong name: myProgram/Program).

내가 표시 할 .class 파일을 얻을 수있는 방법 방법이 있나요을 (myRepository/myProgram) 대신 myRepository 내부에서 java Program을 실행할 수 있습니까?

답변

0

는이 같은 아닌 패키지 디렉토리 내부에서의 myRepository 디렉토리에서 컴파일러를 호출해야합니다 : javac myProgram/Program.java 다음 java myProgram.Program.

생성 된 클래스는 클래스 로더가 찾을 수 있도록 패키지 구조에 있어야합니다 (최소한 기본 클래스 로더와 함께).

당신은 다른 디렉토리에 넣을 수 있습니다,하지만 그들이 거기에 적합한 구조를 가지고 것입니다, 당신은 당신의 VM이 디렉토리를 제공해야합니다 : 방법은 없습니다

javac -d ../classes myProgram/Program.java 
java -cp ../classes myProgram.Program 

(기본 java 명령을) 패키지 이름을 언급하지 않고 패키지에서 클래스를 실행합니다. 당신이 할 수있는, 당신이 IDE로 개발하는 경우, 또는

class Program { 
    public static void main(String[] args) { 
     // delegate to real main class and method: 
     myProgram.Program.main(args); 
    } 
} 

:

당신은 단순히 원래의 클래스를 호출, (어떤 package 선언하지 않고 예) 익명의 패키지에있는 포장 클래스를 사용할 수 있습니다 종종 버튼 클릭만으로 프로그램을 시작하십시오.

배포하려면 모든 클래스 파일을 jar 파일에 저장하고 매니페스트에 기본 클래스를 정의해야합니다.

java -jar myProgram.jar 
+0

그래서 "java program"을 입력하고 소스 코드가 다른 경우에는 기본 디렉토리에서 작동하게 만들 수있는 방법이 없습니다. 예배 규칙서? – FlamesPuck12

+1

새로운'java' 구현체를 작성하는 것 외에는 없습니다. IDE를 사용하면 코드를 컴파일하고 실행하기 위해 버튼을 누르거나 핫키를 누르기 만하면됩니다. –

2

당신은 더 나은 .class 파일을 넣어 빌드라는 디렉토리를 디렉토리 소스/myProgram에 소스 코드를 넣어 만들 : 그럼 당신은 당신의 프로그램이 방법으로 호출 할 수 있습니다.따라서 다음과 같이 컴파일하고 실행할 수 있습니다.

+0

Nvm, 나는이 방법을 사용하여 작동시키고있다. 나는 단지 내가 메인 리포지토리 디렉토리에서 java 프로그램을 할 수 있도록 설정할 수 있기를 바랬지 만 이것이해야 할 일이다. – FlamesPuck12

관련 문제