자바 환경변수 지정에 대한 질문입니다.

zieben의 이미지

도서관에서 자바책을 대충 뒤져봐도 대부분 windows에서의 이야기 뿐이라서 막상 linux에서는 자바의 환경변수를 어떻게 지정해야 되는지 모르겠네요.

일단 제가 사용하는 툴킷에 있는 windows 사용자 메뉴얼에 따르면
set CLASSPATH=" "를 사용해서 CLASSPATH를 툴킷이 있는 lib폴더로 지정하라고 나오더군요.
그래서 linux에서 똑같이 만들어주기 위해서 script를 사용해서
CLASSPATH라는 환경변수를 지정해놨습니다.

그러고 나서 javac 를 사용해서 컴파일을 해봤는데요..
.jar파일들은 읽는것 같은데 package를 못찾는것 같더군요.
그래서 package를 등록하려고 책을 찾아보니...
javac -d ***** text.java와 같이 *****부분에 package들이 들어있는 루트 디렉토리를 넣고(아마도 c:\***** 인듯 합니다) 그 package를 필요로 하는 소스부분에서
import 명령을 사용해서 그 기본 폴더내의 경로를 써주면 되는것 같더군요.
예를 들어서 package의 이름이 testPackage라면

import opcauto.testPackage

와 같이요..
그런데..
linux에서도 이와 똑같이 해보려니 경로 자체 설정이 다른듯 하군요.

예를 들어서 windows에서는 c:\library\dir1\package
이라는 패키지를 import하고 싶으면
소스에서
import dir1.package이렇게 하고 컴파일 시에
javac -d library *****
이렇게 하면 되는 듯 하던데요..

만약에 linux에서 /root/library/dir1/package
이라는 패키지를 import하고 싶으면
소스에서
import library.dir1.package이렇게 하고 컴파일 시에
javac -d root

이렇게 해주면 되는건가요?

좀 한심할 정도로 초보적인 질문이긴 하지만..
자바 시작한지 이틀째라서 조금 이해해주시고
답변 부탁드립니다.

kslee80의 이미지

기본적으로 리눅스에서의 설정과 윈도우에서의 설정의 차이는 없습니다.
환경변수를 셋팅하는 방식이라던지 하는 차이는 있을지 몰라도,
기본적으로 틀리지 않죠.

kimsk99의 이미지

-d는 출력 directory를 위한 인자 입니다.

위의 용도로 가능할 수도 있겠지만, import하는 경로를 지정하는 것은 -classpath입니다.

참고로 윈도우랑 Linux에서 CLASSPATH설정의 차이라면 윈도위에서는 디렉토리 구별을 하기위해서 ';'을 쓰지만 Linux에서는 ':'을 씁니다.

그리고 Linux에서 쉘에 따라서 환경변수는 export해 줘야 지만 동작합니다.

fender의 이미지

자바 개발하실 때 CLASSPATH는 절대로, 웬만하면, Never 잡지 마시기 바랍니다. 반면에 JAVA_HOME은 잡는 것이 좋습니다.

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

creativeidler의 이미지

RTFM

시작한지 이틀째는 질문을 할 만한 시기가 아니라고 생각되는군요.

J2SE 문서 다운 받아서 쭉 읽어보세요. 원하는 대답이 다 있습니다.

zieben의 이미지

우선 답변 주신 분들께 감사드립니다.

기본적인 레퍼런스도 읽지 않은 상태에서 질문드리는게 예의가 아니라는건 압니다.
하지만 일단 시간이 없는 상태에서 java로 된 toolkit으로 구현이 가능한지를 먼저 테스트 해봐야 하기 때문에 Java에 대한 기본 지식없이 소스수정->테스트부터 손대게 되었습니다.
만약 않된다 싶으면 기존의 c++로 만들던 소스로 다시 돌아가야 하기 때문입니다.( 사실 바라는 바이기도 합니다만.. )

그래서 질문이 좀 기본적인 내용이 될지도 모르지만 양해 부탁드립니다.
linux에서 CLASSPATH를 환경변수로 지정하고 컴파일을 해보니까 java에서 기본적으로 사용하는 lib(java.lang등등)들을 못 읽는것 같더군요.
그래서 fender님께서 NEVER 사용하지 말라고 하셨던게 아닌가 싶네요.

javac -classpath /opt/jintegra/lib/jintegra.jar:/opt/jintegra/lib/opcauto OpcAutoClient.java

와 같이 옵션을 주어서 컴파일 해 봤습니다.
환경변수로 CLASSPATH를 만드는것과 같지 않을까 싶었는데..
이렇게 하니까 컴파일은 되는군요.

그런데 문제가

java -DJINTEGRA_NATIVE_MODE OpcAutoClient

와 같이 실행을 시키면..

Exception in thread "main" java.lang.NoClassDefFoundError: com/linar/jintegra/RemoteObjRef
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)

와 같은 에러가 뜨는군요.
역시 자바에서 기본 제공하는 lib들을 못 읽는 것 같은데..
이상한건 이미 CLASSPATH로 정의되어있던 환경변수도 지웠고 -clientpath옵션도 없이 실행을 했는데도 이렇다는 것입니다.

그래서 한번 성공한 김에 똑같이 -clientpath를 붙여서 해봤습니다.

[root@slc java_client]# java -classpath /usr/java/j2sdk1.4.2_04/jre/lib/rt.jar:/opt/jintegra/lib/jintegra.jar:/opt/jintegra/lib -DJINTEGRA_NATIVE_MODE OpcAutoClient
Exception in thread "main" java.lang.NoClassDefFoundError: OpcAutoClient

이렇군요. 마찬가지로 기본 lib를 못 찾는듯 합니다.

첫번째 질문은 위에 제가 시도한 방법중에 첫번쨰 방법은 classpath의 별도 정의가 없는데도 (CLASSPATH 환경변수도 없습니다) 왜 기본 lib를 못 읽는가 하는 것입니다.
두번쨰는 CLASSPATH로 환경변수를 지정하지 않고 기본 lib와 제가 사용하고자 하는 lib를 모두 추가하려면 source코드에서 포함시켜주는 수 밖에 없는건가요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.