パッケージとクラス
自分でパッケージつきクラスを作成することが目標。
クラスパスとは、JVMがクラスファイルを探す場所のこと。クラスパスの指定はjava,javacコマンドの -cpオプションで指定する。
// javac,javaコマンドのクラスパス指定
javac -cp <クラスパス> <ソースファイル名>
java -cp <クラスパス> <クラス名>
//javaの-dオプション
javac -d <出力ディレクトリ> <ソースファイル名>
ぶっちゃけ、現状で何言ってるかわかんないけど、srcに階層化していく感じが慣例っぽい。ソースファイル(.java)はsrcディレクトリ、出力されるクラスファイルはbinディレクトリに作成・保存するのが基本。Eclipseは何も考えないでもそういうふうに作られるようだ。便利。
簡単なクラスの作成
Eclipseでやると何もやらないでよさ気なのだけど、コマンドプロンプト or Terminalで処理をやってみることにする。
.javaファイルをテキストエディタ(Sublime Text)で作成(コード補完出ないの辛い)。
Terminal.appで、cd 作業しているプロジェクトのディレクトリへ。
takawo$ javac -d bin src/Hello.java
takawo$ java -cp bin Hello
パッケージファイルの呼び出し
c:\javaProject>javac -cp bin -d bin src/PackageSample.java
c:\javaProject>java -cp bin PackageSample
Hello
コンパイル時に -d オプションで出力ディレクトリを指定、実行時に、 -cp オプションでクラスパスを指定。cpって言われるとコピーと間違えそうだけど、クラスパス。
パッケージつきクラスの作成
c:\javaProject>javac -d bin src/org/cenkhor/Hello.java
パッケージとクラスパスについて
publicなクラスのファイル名は必ずクラスと同じにする。
クラスパスの指定は、set CLASSPATH=bin
のように、環境変数として指定することで、-cpオプションをつけなくても利用できる。
・-sourcepathオプションで、依存するソースファイルをまとめてコンパイルしてくれる。
c:\javaProject>javac -cp bin -sourcepath src -d bin src/PackageSample.java
ドメイン名とパッケージ名
他言語と一緒でjp.co.yahoo
みたいに定義すると衝突が避けられる(一意になる)。
JARファイル
JAR(Java Archive)ファイルは、複数のクラスファイルを単一のファイルにまとめて圧縮したもの。構造ごと配布する際に便利。ZIP形式で圧縮されている。
JARファイルの作成
末尾の"."はカレントディレクトリ以下のファイルを指定するということ。
c:\javaProject\bin>jar -cvf PackageSample.jar .
マニフェストが追加されました
org/を追加中です(入=0)(出=0)(0%格納されました)
org/cenkhor/を追加中です(入=0)(出=0)(0%格納されました)
org/cenkhor/Hello.classを追加中です(入=506)(出=332)(34%収縮されました)
PackageSample.classを追加中です(入=340)(出=258)(24%収縮されました)
JARファイルの確認
c:\javaProject\bin>jar -tvf PackageSample.jar
0 Mon Jul 14 10:04:38 JST 2014 META-INF/
68 Mon Jul 14 10:04:38 JST 2014 META-INF/MANIFEST.MF
0 Mon Jul 14 09:20:34 JST 2014 org/
0 Mon Jul 14 09:20:34 JST 2014 org/cenkhor/
506 Mon Jul 14 09:20:34 JST 2014 org/cenkhor/Hello.class
340 Mon Jul 14 09:54:02 JST 2014 PackageSample.class
JARファイルの利用
import org.cenkhor.Hello;
public class PackageClient{
public static void main(String[] args){
Hello hello = new Hello();
hello.sayHello();
}
}
階層関係
javaProject2
├ src
│ └ PackageClient.java
├ bin
│ └ PackageClient.class
└ lib
└ PackageSample.jar
コマンドプロンプトでの実行
c:\javaProject2>javac -cp lib/PackageSample.jar -d bin src/PackageClient.java
c:\javaProject2>java -cp lib/PackageSample.jar;bin PackageClient
Hello
Eclipseでのパッケージの利用
パッケージの作成は普通にパッケージ・エクスプローラーやメニューから行える。インポートしてからの実行も普通、クラスパスが通ってない時は補完されるか、エラーが出る。クラスパス、ソースパスの指定とかいちいちしなくていいから楽。
EclipseでのJARファイルの作成、利用
JARファイルの作成は対象のパッケージファイルをエクスポート→Java→JARファイルで作成できる。
使用したい場合は、プロジェクトファイルを右クリック→ビルドパス→外部アーカイブの追加で、JARファイルを追加できる。
その他
gVim
環境構築ばっかしてる気がするけど、以下の記事を参考にvimのインストールをした。gVim。
コマンドプロンプトからのコピペ
よく考えたらCUIツールだからコマンド書いてるほうが変なのかもしれないが、直感的にコピペできないの違和感ある。
Win <=> Mac 間でのプロジェクトファイル
週末普段と違うコンピュータで作業した。Dropboxでディレクトリは同期しているため、プロジェクトファイルが存在するが、パッケージエクスプローラーには反映されていなかった(この辺の設定ファイルがどこに保存されているのか気になるというか、それが同期できればいちいちインポートする手間が省けそう)。以下リンクから該当ファイルをインポートした。重複するものにはチェックされないので安心して実行できるが、慣れたらGit導入してファイル管理するのが良いっぽい。今日は前半の内容の都合、テキストエディタとコマンドプロンプトで作業してたけど、IDEって便利だとつくづく思った。