他のパッケージを含んだクラスを手動でコンパイルし、実行させる練習をしています。
なかなか上手くいかないのでご教授を伺いに来ました。
躓いているのはPackageのコンパイル後の実行です。
以下手順
Cドライブ-root-+-app---bin---Package.java
+-org---etc---TestA.class
+-jp-----co----media----------------TestB.class
1この様なツリーで、Package.javaをコンパイル後に実行が成功したら
TestA success
TestA success
と表示されるTestA、Bを作成しました。
↓TestA
lang
1package org.etc; 2public class TestA { 3 public void write() { 4 System.out.println("TestA success"); 5 } 6}
↓TestB
lang
1package co.media; 2public class TestB { 3 public void write() { 4 System.out.println("TestB success"); 5 } 6}
ここまでは問題無いと思っています。
そしてPackageをappをカレントフォルダとしてコンパイル
↓Package
lang
1package bin; 2import org.etc.TestA; 3import co.media.TestB; 4 5public class Package { 6 public static void main(String[] args) { 7 8 TestA pursueA = new TestA(); 9 pursueA.write(); 10 11 TestB pursueB = new TestB(); 12 pursueB.write(); 13 } 14}
コマンドプロンプト
lang
1C:\root\app>javac -cp ../;../jp ./bin/Package.java
これでC:\root\app\binにPackage.classを作りました。
この後の実行が出来ません。
コマンドプロンプト
lang
1C:\root\app>cd bin 2 3C:\root\app\bin>java Package 4Exception in thread "main" java.lang.NoClassDefFoundError: Package (wrong n 5ame: bin/Package) 6 at java.lang.ClassLoader.defineClass1(Native Method) 7 at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 8 at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 9 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14 101) 11 at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 12 at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 13 at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 14 at java.security.AccessController.doPrivileged(Native Method) 15 at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 16 at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 17 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 18 at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 19Could not find the main class: Package. Program will exit.
追記:
kodaiさんのご指摘により
コマンドプロンプト
lang
1appに移動→java bin.Package
を行い、エラーが減りました。
残ったエラーはこちらです><
lang
1C:\root\app\bin>cd ../ 2 3C:\root\app>java bin.Package 4Exception in thread "main" java.lang.NoClassDefFoundError: bin/Package 5Caused by: java.lang.ClassNotFoundException: bin.Package 6at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 7at java.security.AccessController.doPrivileged(Native Method) 8at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 9at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 10at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 11at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 12Could not find the main class: bin.Package. Program will exit.
コマンドプロンプト
lang
1app> java -cp ..;. bin.Package
こちらの入力により、TestAがsuccessになりました。
kodaiさんありがとうございます><
残りBを通すパスを現在思案中です。
コマンドプロンプト
lang
1C:\root\app>java -cp ..;. bin.Package 2TestA success 3Exception in thread "main" java.lang.NoClassDefFoundError: co/media/TestB 4at bin.Package.main(Package.java:11) 5Caused by: java.lang.ClassNotFoundException: co.media.TestB 6at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 7at java.security.AccessController.doPrivileged(Native Method) 8at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 9at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 10at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 11at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
以上が現在の引っかかっているところまでの手順です。
一つでも良いので間違っているところを指摘して頂けると助かります。
JAVA遣いの皆様、どうかよろしくお願いします。
解決しました。
コマンドプロンプト
lang
1C:\root\app>java -cp ../;../jp; bin/Package 2TestA success 3TestB success
今回の自分の学び。
・コンパイルしたクラスを実行する時はパッケージの親フォルダから。
・他のパッケージを参照に取り込む時はclasspathを入力して指定。
・指定する時もパッケージの親フォルダまでを指定。
・複数あるときはセミコロン;
・相対パスは慎重に作らないと結構間違える。
kodaiさんにはとてもお世話になりました!
ありがとうございました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/14 04:22