2013-03-12 2 views
0

Eclipse에서 아무런 문제없이 내 Main.java 파일을 컴파일 할 수 있습니다.패키지로 리눅스에서 java 파일을 컴파일하는 방법

내부 Main.java 나는 다른 3 개 개의 파일 내부

package com.selenium.zLoadProfilerPkg; 

내가 리눅스에 전체 구조를 업로드 할 때 나는 또한 그러나

package com.selenium.zLoadProfilerPkg; 

을 가지고 있고, 나는 그것을 컴파일하려고, I 얻을 오류 : "패키지 com.selenium.zLoadProfilerPkg를,"

[[email protected] zLoadProfilerPkg]$ pwd 
/home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler/src/com/selenium/zLoadProfilerPkg 
[[email protected] zLoadProfilerPkg]$ cd /home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler/src/com/selenium/zLoadProfilerPkg/; javac -cp ".:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/selenium-java-2.30.0.jar:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/libs/*:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/selenium-server-standalone-2.30.0.jar:/home/sgalkov/zpp_tech_git_checkout/profiler/browsermob-proxy-2.0-beta-7/browsermob-proxy-2.0-beta-7-sources.jar:/home/sgalkov/zpp_tech_git_checkout/profiler/browsermob-proxy-2.0-beta-7/lib/*:/home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler/src/com/selenium/zLoadProfilerPkg" Main.java 
Main.java:54: error: cannot find symbol 
    BrowsermobProxy bmp = new BrowsermobProxy(PROXY_API_HOST, PROXY_API_PORT); 
    ^
symbol: class BrowsermobProxy 
location: class Main 

Main.java:54: error: cannot find symbol 
    BrowsermobProxy bmp = new BrowsermobProxy(PROXY_API_HOST, PROXY_API_PORT); 
          ^
symbol: class BrowsermobProxy 
location: class Main 

Main.java:310: error: cannot find symbol 
     HarStorage hs = new HarStorage(HARSTORAGE_HOST, HARSTORAGE_PORT); 
     ^
symbol: class HarStorage 
location: class Main 

Main.java:310: error: cannot find symbol 
     HarStorage hs = new HarStorage(HARSTORAGE_HOST, HARSTORAGE_PORT); 
          ^
symbol: class HarStorage 
location: class Main 

4 errors 
[[email protected] zLoadProfilerPkg]$ 

나는 주석 경우 4 개의 파일 각각에서 하나씩 컴파일하면 모든 것이 잘 작동합니다. 또한

, 나는 이런 식으로 컴파일하려고하면 :

cd /home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler/src/com/selenium/zLoadProfilerPkg/; 

javac -cp ".\ 
:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/selenium-java-2.30.0.jar\ 
:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/libs/*\ 
:/home/sgalkov/zpp_tech_git_checkout/profiler/selenium-2.30.0/selenium-server-standalone-2.30.0.jar\ 
:/home/sgalkov/zpp_tech_git_checkout/profiler/browsermob-proxy-2.0-beta-7/browsermob-proxy-2.0-beta-7-sources.jar\ 
:/home/sgalkov/zpp_tech_git_checkout/profiler/browsermob-proxy-2.0-beta-7/lib/*\ 
:/home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler/src/com/selenium/zLoadProfilerPkg" \ 
BrowsermobProxy.java HarStorage.java HttpRequest.java Main.java 

가 컴파일 않습니다하지만 난 Main.java

rw-r--r-- 1 sgalkov users 1422 Mar 11 20:30 Main$1.class 
rw-r--r-- 1 sgalkov users 8264 Mar 11 20:30 Main.class 
rw-r--r-- 1 sgalkov users 14864 Mar 11 19:32 Main.java 

에 대한 별도의 클래스를 얻고있다 그리고 나는를 실행할 수 없습니다입니다 프로그램에서 오류가 발생합니다.

Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: com/selenium/zLoadProfilerPkg/Main) 
    at java.lang.ClassLoader.defineClass1(Native Method) 

다양한 옵션을 둘러 보았지만이 프로젝트를 컴파일 할 수 없습니다. 그리고 어떤 조언도 감사 할 것입니다.

+0

메인 $ 1.클래스가 "추가"클래스가 아니라면 내부 클래스입니다 (일반적으로). Main.java에 내부 클래스가 있습니까? (심지어 익명의 내부 클래스 일까?) –

+1

또한 클래스 패스를 처리하기위한 작은 스크립트를 작성하고 * nix 셸에서 정기적으로 빌드해야하는 경우에 사용합니다. 또는 ant/maven/etc를 사용할 수도 있습니다. 또 다른 대안은 (당신이 * nix에서 정기적으로 빌드하지 않는다면) Eclipse (Eclipse에서 작동하고 JAR로 내보내기)에서 내보내기 만하면됩니다. IDE에서 내보내기 좋은 습관은 아니지만 일회 또는 매우 드물게 수행해야하는 경우 작동합니다. –

+0

덕분에 내부 클래스가 발견되었습니다 – Kentor

답변

1
dir=/home/sgalkov/zpp_tech_git_checkout/profiler 

cd "$dir/zLoadProfiler/zLoadProfiler/src/" 

javac -cp ".\ 
:$dir/selenium-2.30.0/selenium-java-2.30.0.jar\ 
:$dir/selenium-2.30.0/libs/*\ 
:$dir/selenium-2.30.0/selenium-server-standalone-2.30.0.jar\ 
:$dir/browsermob-proxy-2.0-beta-7/browsermob-proxy-2.0-beta-7-sources.jar\ 
:$dir/browsermob-proxy-2.0-beta-7/lib/*\ 
:$dir/zLoadProfiler/zLoadProfiler/src/" \ 
com/selenium/zLoadProfilerPkg/*.java 
+0

이 작동하지만 여전히 어떤 이유에서 Main $ 1.class 파일을 얻고 있습니다 – Kentor

+0

실제로 내부 클래스를 찾았습니다. 감사합니다! – Kentor

+0

천재는 단순하기 때문에 가장 짧은 대답은 때로는 가장 짧습니다. –

0

당신이 Apache Ant를 사용해야 IDE를 외부 응용 프로그램을 컴파일합니다. 다음은 Ant로 애플리케이션을 컴파일하는 데 사용할 수있는 예제 build.xml 파일입니다.

<?xml version="1.0" encoding="UTF-8"?> 
<project basedir="/home/sgalkov/zpp_tech_git_checkout/profiler/zLoadProfiler/zLoadProfiler" 
    default="compile"> 

<property name="dir.prefix" value="/home/sgalkov/zpp_tech_git_checkout/profiler"/> 

<path id="compile.classpath"> 
    <pathelement location="classes"/> 
    <fileset dir="${dir.prefix}/selenium-2.30.0"> 
     <include name="selenium-java-2.30.0.jar"/> 
     <include name="libs/*"/> 
     <include name="selenium-server-standalone-2.30.0.jar"/> 
    </fileset> 
    <fileset dir="${dir.prefix}/browsermob-proxy-2.0-beta-7"> 
     <include name="browsermob-proxy-2.0-beta-7-sources.jar"/> 
     <include name="lib/*"/> 
    </fileset> 
</path> 
<property name="compile.classpath" refid="compile.classpath"/> 


<target name="compile"> 
    <mkdir dir="classes"/> 
    <javac failonerror="true" srcdir="src" debug="yes" 
     includes="**/*.java" destdir="classes" 
     classpath="${compile.classpath}"> 
    </javac> 
</target> 

<target name="clean"> 
    <delete dir="classes"/> 
</target> 

</project> 

모든 수업은 소스 패키지의 계층 구조를 미러링하는 구조로 classes라는 폴더에 종료됩니다. 애플리케이션을 실행하려면 클래스 경로에 classes 폴더를 놓고 메인 클래스를 com.selenium.zLoadProfilerPkg.Main으로 부릅니다. jar 파일에 클래스를 패키징하는 것과 같은 개미에는 멋진 기능이 있습니다.

Main$1.class까지는 패키지 정의가 각 Java 소스 파일의 맨 위에 올바르게 정의되어 있는지 확인하십시오.

또한 내가 제공 한 개미 빌드 스크립트에서 compile.classpath을 확인하여 질문에서 입력 한 classpath의 내용을 잘못 입력하거나 나타내지 않았는지 확인하십시오.

0

서브 디렉토리 com (최상위 패키지)이있는 소스 루트 디렉토리에 javac을 시작해야합니다. 이것은 Windows에서도 테스트 할 수 있습니다.

컴파일 된 .class'es/jars/wars/ear도 배포 할 수 있습니다. 그런 다음 컴파일 대상이 필요합니다 (1.5, 1.6, 1.7).

그리고 네, 개미 또는 요즘 받는다는는 IDE 및 독립 안에 모두 좋은 빌드 인프라를 제공 할 수 있습니다.

+0

예, ant/maven은 좋은 생각이지만이 작업을 먼저 수행하려고합니다. :) – Kentor

관련 문제