# Java 컴파일및 실행시 classpath 환경 설정 중요.
# classpath 현재위치( . ) 실행 테스트
옵션 : -cp 와 -classpath 동일
[app@sunshiny classes]$ java -cp . TestMain
[app@sunshiny classes]$ java -classpath . TestMain
# Java 컴파일시 오류
# Java 실행시 오류
# 사용자 프로파일 설정 예
# Java 옵션 정보
# Java 컴파일시 인코딩 옵션
javac -encoding UTF-8 -classpath Test.java
# Java 실행시 인코딩 옵션
java -Dfile.encoding=UTF-8 -classpath Test
# classpath 현재위치( . ) 실행 테스트
옵션 : -cp 와 -classpath 동일
[app@sunshiny classes]$ java -cp . TestMain
[app@sunshiny classes]$ java -classpath . TestMain
# Java 컴파일시 오류
# Java 컴파일시에 import 하는 클래스 파일을 찾지 못하는 증상
TestMain.java:9: error: package kr.sunshiny.util.security does not exist
import kr.sunshiny.util.security.SecurityMgr;
# -sourcepath 옵션에 클래스(classes) 파일의 시작위치를 지정해줌(javac 옵션 정보 확인)
javac -classpath $CLASS_PATH -sourcepath /usr/local/app/classes kr/sunshiny/test/TestMain.java
TestMain.java:9: error: package kr.sunshiny.util.security does not exist
import kr.sunshiny.util.security.SecurityMgr;
# -sourcepath 옵션에 클래스(classes) 파일의 시작위치를 지정해줌(javac 옵션 정보 확인)
javac -classpath $CLASS_PATH -sourcepath /usr/local/app/classes kr/sunshiny/test/TestMain.java
# Java 실행시 오류
오류: 기본 클래스 TestMain(를) 찾거나 로드할 수 없습니다.
# 필요 라이브러리를 사용자 클래스 패스에 설정을 해놓아도 Java 실행시 클래스파일을 찾지 못하는 증상
[app@sunshiny classes]$ java TestMain
또는[app@sunshiny classes]$ java -classpath . TestMain
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/common/Common
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
at java.lang.Class.getMethod0(Class.java:2685)
at java.lang.Class.getMethod(Class.java:1620)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.common.Common
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 6 more
# jar 파일위치 지정 또는 사용자 프로파일에 설정해둔 환경의 CLASS_PATH 를 명시해줌.
[app@sunshiny classes]$ java -classpath $CLASS_PATH TestMain
# 필요 라이브러리를 사용자 클래스 패스에 설정을 해놓아도 Java 실행시 클래스파일을 찾지 못하는 증상
[app@sunshiny classes]$ java TestMain
또는[app@sunshiny classes]$ java -classpath . TestMain
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/common/Common
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
at java.lang.Class.getMethod0(Class.java:2685)
at java.lang.Class.getMethod(Class.java:1620)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.common.Common
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 6 more
# jar 파일위치 지정 또는 사용자 프로파일에 설정해둔 환경의 CLASS_PATH 를 명시해줌.
[app@sunshiny classes]$ java -classpath $CLASS_PATH TestMain
- 컴파일 후 해당 위치에서 클래스 파일을 실행할때 이름을 찾지 못하는 증상
[app@sunshiny test]$ java -classpath $CLASS_PATH TestMain
Exception in thread "main" java.lang.NoClassDefFoundError: kr/sunshiny/test/TestMain (wrong name: TestMain)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
# 클래스파일 패키지(classes) 시작 위치로 이동을 한후에 해당 클래스파일을 실행
[app@sunshiny classes]$ java -classpath $CLASS_PATH kr/sunshiny/test/TestMain
[app@sunshiny test]$ java -classpath $CLASS_PATH TestMain
Exception in thread "main" java.lang.NoClassDefFoundError: kr/sunshiny/test/TestMain (wrong name: TestMain)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
# 클래스파일 패키지(classes) 시작 위치로 이동을 한후에 해당 클래스파일을 실행
[app@sunshiny classes]$ java -classpath $CLASS_PATH kr/sunshiny/test/TestMain
# 사용자 프로파일 설정 예
[app@sunshiny classes]$ vi ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
### Java Env
export JAVA_HOME=/usr/local/java/jdk1.7.0_10
### Test Env
export TEST_APP_HOME=/usr/local/app
export TEST_APP_CORE=$TEST_APP_HOME/lib/test_app-core.jar
export MYSQL_DRIVER=$TEST_APP_HOME/lib/mysql-connector-java-5.0.7-bin.jar
예1) export CLASS_PATH=.:$TEST_APP_CORE:$MYSQL_DRIVER:$JAVA_HOME/lib
예2) export CLASS_PATH=/home/webapps/classes/.:$TEST_APP_CORE:$MYSQL_DRIVER:$JAVA_HOME/lib
# 예1) 어느 위치에서나 현재위치에서부터 클래스 파일을 실행하도록 명시하는 부분( . )
# 예2) 어느 위치에서나 특정 디렉토리의 classes 에서부터 클래스 파일을 실행하고자 할때.
(스케줄 등록, 스크립트 내에서 활용)
PATH=$PATH:$HOME/bin:$CLASS_PATH:$JAVA_HOME/bin
export PATH
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
### Java Env
export JAVA_HOME=/usr/local/java/jdk1.7.0_10
### Test Env
export TEST_APP_HOME=/usr/local/app
export TEST_APP_CORE=$TEST_APP_HOME/lib/test_app-core.jar
export MYSQL_DRIVER=$TEST_APP_HOME/lib/mysql-connector-java-5.0.7-bin.jar
예1) export CLASS_PATH=.:$TEST_APP_CORE:$MYSQL_DRIVER:$JAVA_HOME/lib
예2) export CLASS_PATH=/home/webapps/classes/.:$TEST_APP_CORE:$MYSQL_DRIVER:$JAVA_HOME/lib
# 예1) 어느 위치에서나 현재위치에서부터 클래스 파일을 실행하도록 명시하는 부분( . )
# 예2) 어느 위치에서나 특정 디렉토리의 classes 에서부터 클래스 파일을 실행하고자 할때.
(스케줄 등록, 스크립트 내에서 활용)
PATH=$PATH:$HOME/bin:$CLASS_PATH:$JAVA_HOME/bin
export PATH
# Java 옵션 정보
[search@sunshiny classes]$ javac
Usage: javac <options> <source files>
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are used
-classpath <path> Specify where to find user class files and annotation processors
-cp <path> Specify where to find user class files and annotation processors
-sourcepath <path> Specify where to find input source files
-bootclasspath <path> Override location of bootstrap class files
-extdirs <dirs> Override location of installed extensions
-endorseddirs <dirs> Override location of endorsed standards path
-proc:{none,only} Control whether annotation processing and/or compilation is done.
-processor <class1>[,<class2>,<class3>...]Names of the annotation processors to run; bypasses default discovery process
-processorpath <path> Specify where to find annotation processors
-d <directory> Specify where to place generated class files
-s <directory> Specify where to place generated source files
-implicit:{none,class} Specify whether or not to generate class files for implicitly referenced files
-encoding <encoding> Specify character encoding used by source files
-source <release> Provide source compatibility with specified release
-target <release> Generate class files for specific VM version
-version Version information
-help Print a synopsis of standard options
-Akey[=value] Options to pass to annotation processors
-X Print a synopsis of nonstandard options
-J<flag> Pass <flag> directly to the runtime system
-Werror Terminate compilation if warnings occur
[app@sunshiny classes]$ java
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-server to select the "server" VM
The default VM is server.
-cp <class app path of directories and zip/jar files>
-classpath <class app path of directories and zip/jar files>
A : separated list of directories, JAR archives,
and ZIP archives to app for class files.
-D<name>=<value>
set a system property
-verbose[:class|gc|jni]
enable verbose output
-version print product version and exit
-version:<value>
require the specified version to run
-showversion print product version and continue
-jre-restrict-app | -jre-no-restrict-app
include/exclude user private JREs in the version app
-? -help print this help message
-X print help on non-standard options
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions with specified granularity
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
disable assertions with specified granularity
-esa | -enablesystemassertions
enable system assertions
-dsa | -disablesystemassertions
disable system assertions
-agentlib:<libname>[=<options>]
load native agent library <libname>, e.g. -agentlib:hprof
see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:<pathname>[=<options>]
load native agent library by full pathname
-javaagent:<jarpath>[=<options>]
load Java programming language agent, see java.lang.instrument
-splash:<imagepath>
show splash screen with specified image
See http://java.sun.com/javase/reference for more details.
Usage: javac <options> <source files>
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are used
-classpath <path> Specify where to find user class files and annotation processors
-cp <path> Specify where to find user class files and annotation processors
-sourcepath <path> Specify where to find input source files
-bootclasspath <path> Override location of bootstrap class files
-extdirs <dirs> Override location of installed extensions
-endorseddirs <dirs> Override location of endorsed standards path
-proc:{none,only} Control whether annotation processing and/or compilation is done.
-processor <class1>[,<class2>,<class3>...]Names of the annotation processors to run; bypasses default discovery process
-processorpath <path> Specify where to find annotation processors
-d <directory> Specify where to place generated class files
-s <directory> Specify where to place generated source files
-implicit:{none,class} Specify whether or not to generate class files for implicitly referenced files
-encoding <encoding> Specify character encoding used by source files
-source <release> Provide source compatibility with specified release
-target <release> Generate class files for specific VM version
-version Version information
-help Print a synopsis of standard options
-Akey[=value] Options to pass to annotation processors
-X Print a synopsis of nonstandard options
-J<flag> Pass <flag> directly to the runtime system
-Werror Terminate compilation if warnings occur
[app@sunshiny classes]$ java
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-server to select the "server" VM
The default VM is server.
-cp <class app path of directories and zip/jar files>
-classpath <class app path of directories and zip/jar files>
A : separated list of directories, JAR archives,
and ZIP archives to app for class files.
-D<name>=<value>
set a system property
-verbose[:class|gc|jni]
enable verbose output
-version print product version and exit
-version:<value>
require the specified version to run
-showversion print product version and continue
-jre-restrict-app | -jre-no-restrict-app
include/exclude user private JREs in the version app
-? -help print this help message
-X print help on non-standard options
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions with specified granularity
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
disable assertions with specified granularity
-esa | -enablesystemassertions
enable system assertions
-dsa | -disablesystemassertions
disable system assertions
-agentlib:<libname>[=<options>]
load native agent library <libname>, e.g. -agentlib:hprof
see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:<pathname>[=<options>]
load native agent library by full pathname
-javaagent:<jarpath>[=<options>]
load Java programming language agent, see java.lang.instrument
-splash:<imagepath>
show splash screen with specified image
See http://java.sun.com/javase/reference for more details.
# Java 컴파일시 인코딩 옵션
javac -encoding UTF-8 -classpath Test.java
# Java 실행시 인코딩 옵션
java -Dfile.encoding=UTF-8 -classpath Test
댓글 없음:
댓글 쓰기