ページ 11

java言語にて jarファイルの利用方法がわkらない

Posted: 2015年7月27日(月) 01:02
by dic
質問は件名にあるとおり、java言語にて ライブラリ化された .jarファイルの
利用方法が本を読んでいるのですが、うまくいきません。
クラスパスを設定しても、 -cp オプションを利用してもうまくいきません。

エディタには jpad を利用しています。
メニューの実行ー>設定の項目で、クラスパスを設定しています。
以下の設定を変更するをチェックして、追加するパスの項目に
CLASSPATH="C:\Users\owner\Documents\Visual Studio 2010\jcpad231\ソースコード\junit-4.12.jar"
を追加して、以下のソースコードをコンパイルしたところコンパイルエラーが発生しました。

ファイルは3つあります。 junit の利用方法でつまづいています。

[Account.java]

コード:

public class Account {
	String owner;
	int balance;
	public Account (String owner, int balance )
	{
		this.owner = owner;
		this.balance = balance;
	}
	public void transfer( Account dest, int amount ) {
		dest.balance += amount;
		balance += amount;
	}
}
[AccountTest.java]

コード:

/*
	リスト14-2 初めてのテストクラス
*/

public class AccountTest {
	public static void main( String[] args) {
		testInstanctiate();
		testTransfer();
	}
	
	private static void testInstanctiate() {
		System.out.println( "無事newできるかテストします" );
		Account a = new Account( "ミナト", 30000 );
		if( !"ミナト".equals(a.owner) ) {
			System.out.println( "失敗! 名義人がおかしい" );
		}
		if( 30000 != a.balance) {
			System.out.println( "失敗! 残高がおかしい" );
		}
		System.out.println( "テストを終了します。" );
	}
	
	private static void testTransfer() {
	}
}

そして、Junit でテストしようとコンパイルするのですが、ここのソースコードはエラーになります。
[AccountTest2.java]

コード:

import org.junit.Test;
import static org.junit.Assert.*;

public class AccountTest2 {
	
	@Test public void instantiate() {
		Account a = new Account( "ミナト", 30000 );
		assertEquals( "ミナト", a.owner );
		assertEquals( 30000, a.balance );
	}
	
	@Test void transfer() {
	}
	
}
エラーメッセージは以下になります。

■D:\デスクトップへ\Documents\Visual Studio 2010\jcpad231\ソースコード> javac AccountTest2.java
AccountTest2.java:1: エラー: パッケージorg.junitは存在しません
import org.junit.Test;
^
AccountTest2.java:2: エラー: パッケージorg.junitは存在しません
import static org.junit.Assert.*;
^
AccountTest2.java:6: エラー: 不適合な型: TestをAnnotationに変換できません:
@Test public void instantiate() {
^
AccountTest2.java:12: エラー: 不適合な型: TestをAnnotationに変換できません:
@Test void transfer() {
^
AccountTest2.java:8: エラー: シンボルを見つけられません
assertEquals( "ミナト", a.owner );
^
シンボル: メソッド assertEquals(String,String)
場所: クラス AccountTest2
AccountTest2.java:9: エラー: シンボルを見つけられません
assertEquals( 30000, a.balance );
^
シンボル: メソッド assertEquals(int,int)
場所: クラス AccountTest2
エラー6個



おそらく、.jar ファイルの設定方法がうまくいっていないせいかと思います。
どのように設定をすればいいのでしょうか?

Re: java言語にて jarファイルの利用方法がわkらない

Posted: 2015年7月27日(月) 17:55
by ISLe()
環境変数CLASSPATHに設定するパスをダブルクォートしているのがいけないようです。
環境変数CLASSPATHの使用は非推奨なので-cpオプションをお勧めします。

AccountTest2.javaとjunit-4.12.jarは同じ場所にあるので
#正確には基準パスが同じなので

javac -cp .;junit-4.12.jar AccountTest2.java
というコマンドでコンパイルできます。
※カレントディレクトリを含める。

実行時オプションとコンパイル時オプションに
-cp .;junit-4.12.jar
を指定してください。

ちなみに-cpオプションではパスのクォートが可能です。

Re: java言語にて jarファイルの利用方法がわkらない

Posted: 2015年7月28日(火) 05:24
by dic
自己解決しました。

junit-4.12.jar というjarファイルを展開したらコンパイルが通り、
期待した通りの動作をしてくれました。

>>ISLeさん
それではどうにもうまくいかなかったです。が、参考になりました。ありがとうございました。

Re: java言語にて jarファイルの利用方法がわkらない

Posted: 2015年7月28日(火) 18:18
by ISLe()
dic さんが書きました:それではどうにもうまくいかなかったです。
環境に問題があってクラスパスを正しく扱えないのでしょう。
変な癖が付かないように、当たり前のことが当たり前にできる環境で学習することをお勧めします。

jarファイルを展開しても、基準ディレクトリを異なる配置とする場合は、クラスパスの指定が必要です。

これからも必要なライブラリをプロジェクトごとに展開し続ける手間と時間を考えたらいま対策しておくべきなのでは。


-cpオプションを使ったときのエラーメッセージ(というか出力)を見せていたたければどこに問題があるかはっきりするかもしれません。
javacのコマンドライン引数が表示されてますからね。
#-cpのあとにスペースを入れ忘れるといった愚かなミスなどではあるまいし。

Re: java言語にて jarファイルの利用方法がわkらない

Posted: 2015年7月30日(木) 18:14
by ISLe()
dic さんが書きました:>>ISLeさん
それではどうにもうまくいかなかったです。が、参考になりました。ありがとうございました。
こちらでJCPad v2.31を使って実験したところでは、-cpオプションは期待通りに動作しました。