우분투 서버에 자바 컴파일시 에러 가…
my.util 패키지는 클래스패치 한 WEB-INF/classes/* 에 있습니다
명령어 실행은 루트디렉토리에서( javac -d ./WEB-INF/classes/ ./src/MemberDao.java) 실행했더니 아래에러가 나오내요 ;
클래스패스내용
echo $CLASSPATH
.:/var/lib/tomcat7/webapps/ROOT/WEB-INF/classes/:/usr/local/java/lib/:/usr/share/tomcat7/lib/*
기본적으로 MemberDao.java 파일에 text 오타 없고요 클래스패치 이상없어보입니다… 그런데 왜 컴파일할려고하면 my.util.ConnUtil 클래스를 못찾는다고하면서 에러가 나오는지 이해가안되내요 혹시 이런에러가 나오는데 어떤 문제가 있어서 나오는걸까요 ???
./src/MemberDao.java:5: error: package my.util does not exist
import my.util.ConnUtil;
^
./src/MemberDao.java:8: error: cannot find symbol
public int insertMember(MemberVo vo){
^
symbol: class MemberVo
location: class MemberDao
./src/MemberDao.java:13: error: cannot find symbol
conn = ConnUtil.getConnection();
^
symbol: variable ConnUtil
location: class MemberDao
./src/MemberDao.java:34: error: cannot find symbol
ConnUtil.close(ps, conn);
^
symbol: variable ConnUtil
location: class MemberDao
4 errors
my.util package가 jar file인가요? 그렇다면 저도 모르겠구요.
만약 my.util package가 class file들의 모음이라면, CLASSPATH를 잘못 쓰셨네요.
혹시나 해서, 헛소리 한번 지껄이고 갑니다.
뭐… 잘 아시겠지만…
Apache Ant를 쓰시면 이런 문제가 상당히 자동화되어서 편리한 것 같아요.
우분투써본적이없어서요 ㅎㅎ;; apache ant 라는게 뭔가요 ? 한번구글링해봐야겠내요 ! 감사합니다
my.util 은 패키지 디렉토리이며 그안에 그냥 클래스파일들에 모임입니다.
CLASSPATH 를 잘못썻다고하시는데 어떤부분이 잘못된건지 저는잘모르겠더라구요 ; 잘못된걸어떻게확인할수있을까요 ?
제 /etc/profile 의 클래스패스 설정입니다
JAVA_HOME=/usr/local/java
NCT_HOME=/var/lib/tomcat7/webapps/ROOT
CATALINA_HOME=/usr/share/tomcat7
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
#CLASSPATH=.:$NCT_HOME/build/classes/:$JAVA_HOME/lib/:$TOMCAT_HOME/lib/*
CLASSPATH=.:$NCT_HOME/WEB-INF/classes/:$JAVA_HOME/lib/:$CATALINA_HOME/lib/*
export JAVA_HOME PATH CLASSPATH CATALINA_HOME
[url:116619iq]http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/classpath.html[/url:116619iq]
위 글을 한번 정독하시길 권장합니다. 몇가지만 뽑아보자면…
[quote:116619iq]Class path entries can contain the basename wildcard character , which is considered equivalent to specifying a list of all the files in the directory with the extension .jar or .JAR. For example, the class path entry foo/ specifies all JAR files in the directory named foo.[/quote:116619iq]
=> CLASSPATH entry에 *을 쓰는 경우, 그것은 jar file을 의미합니다. class file은 해당되지 않습니다.
[quote:116619iq]A class path entry that contains * will not match class files. To match both classes and JAR files in a single directory foo, use either foo:foo/* or foo/:foo. [/quote:116619iq]
=> 은 class file을 의미하지 않으므로 foo/ 형태에 class file은 해당하지 않습니다. class file을 포함하려면 / 없이 folder path 만을 써 주어야 합나다.
다른 사항들도 위 문서를 참조하세요.
제가 너무 불친절했나요?
-cp 옵션을 사용해보세요…
http://lng1982.tistory.com/153
[code:7dz14bze]
$ ls
MyFirstApp.java MySecondApp.java MyThirdApp.java
$ javac -d . MyFirstApp.java
$ javac -d . MySecondApp.java
$ javac -d . MyThirdApp.java
$ ls
MyFirstApp.java MySecondApp.java MyThirdApp.class MyThirdApp.java helloworld
$ ls helloworld/
MyFirstApp.class MySecondApp.class
$ mv helloworld/ /tmp/
$ javac -d /tmp MyThirdApp.java
MyThirdApp.java:1: package helloworld does not exist
import helloworld.MyFirstApp;
^
MyThirdApp.java:2: package helloworld does not exist
import helloworld.MySecondApp;
^
MyThirdApp.java:11: cannot access MyFirstApp
bad class file: ./MyFirstApp.java
file does not contain class MyFirstApp
Please remove or make sure it appears in the correct subdirectory of the classpath.
new MyFirstApp();
^
3 errors
$ javac -cp /tmp MyThirdApp.java
$ more *.java
::::::::::::::
MyFirstApp.java
::::::::::::::
package helloworld;
public class MyFirstApp {
public MyFirstApp(){
System.out.println("Hello World!! MyFirstApp");
}
public static void main(String[] args){
new MyFirstApp();
}
}
::::::::::::::
MySecondApp.java
::::::::::::::
package helloworld;
import javax.swing.*;
public class MySecondApp extends JFrame {
public MySecondApp(){
setSize(300,400);
setLocation(20,20);
JLabel myLabel = new JLabel("Hello World!! MySecondApp");
add(myLabel);
setVisible(true);
}
public static void main(String[] args) {
new MySecondApp();
new MyFirstApp();
}
}
::::::::::::::
MyThirdApp.java
::::::::::::::
import helloworld.MyFirstApp;
import helloworld.MySecondApp;
public class MyThirdApp {
public MyThirdApp(){
System.out.println("Hello World MyThirdApp");
}
public static void main(String[] args){
new MyFirstApp();
new MySecondApp();
new MyThirdApp();
}
}
[/code:7dz14bze]
와 두분다 감사합니다 !! 많은도움이된거같아요 !! 일단해보고 다시돌아오겠습니다 ^^