雖然是在寫Java的程式,不過還是利用Linux的習慣來建立Java專案,以下是我的目錄架構以及分類
bin : 所產生的class目錄
lib : 使用到的外部jar
Makefile : Compiler Process
META-INF : MANIFEST.MF的目錄
out : 產出的jar檔
src : source code目錄,須使用java的目錄格式
1. 如果你希望把外部的jar包進你的jar檔裡面,那要使用外部的jar檔,必須在自己的程式裡面撰寫動態load class。
2. 外部import jar檔進來,也分成兩個方法(以下介紹此方法),
2-1. 執行jar檔時,加入-cp .:lib/commons-io-2.4.jar (note: 有一個 .)。
2-2. 寫入在MANIFEST.MF,當執行jar檔時,就會找MANIFEST.MF定義的位置。
BIN = bin
SRC = $(shell find src -name *.java)
OUT = out
LIBS = lib/commons-io-2.4.jar;lib/jtds-1.2.7.jar
MANIFEST = META-INF/MANIFEST.MF
TARGET = $(OUT)/test.jar
all: build-class create-jar
build-class:#compiler src/com/test.java,並放置bin下
javac -sourcepath $(SRC) -classpath $(LIBS) -d bin $(MAIN_FILE)
# Note : javac Options :
# -sourcepath : .java檔的位置 # -classpath : 指定外部jar檔或class
# -d : class放置的位置
create-jar: # 封裝成jar檔
jar cvfm $(TARGET) $(MANIFEST) -C $(BIN) .
cp $(LIBS) $(OUT)
# Note : jar Options :
# c : 建立一個新的jar檔
# v : 顯示包裝運作的過程.
# f : 指定要放到jar檔的檔案
# C : change dir
clean:
rm -rf $(BIN)/* $(OUT)/*
SRC = $(shell find src -name *.java)
OUT = out
LIBS = lib/commons-io-2.4.jar;lib/jtds-1.2.7.jar
MANIFEST = META-INF/MANIFEST.MF
TARGET = $(OUT)/test.jar
all: build-class create-jar
build-class:#compiler src/com/test.java,並放置bin下
javac -sourcepath $(SRC) -classpath $(LIBS) -d bin $(MAIN_FILE)
# Note : javac Options :
# -sourcepath : .java檔的位置 # -classpath : 指定外部jar檔或class
# -d : class放置的位置
create-jar: # 封裝成jar檔
jar cvfm $(TARGET) $(MANIFEST) -C $(BIN) .
cp $(LIBS) $(OUT)
# Note : jar Options :
# c : 建立一個新的jar檔
# v : 顯示包裝運作的過程.
# f : 指定要放到jar檔的檔案
# C : change dir
clean:
rm -rf $(BIN)/* $(OUT)/*
Manifest-Version: 1.0
Sealed: true
Main-Class: com.test
Class-Path: lib/commons-io-2.4.jar
Sealed: true
Main-Class: com.test
Class-Path: lib/commons-io-2.4.jar
package com;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class test {
static public void main(String[] args) {
File src = new File ( args[0] );
File dst = new File ( args[1] );
try {
FileUtils.copyFile(src,dst);
} catch ( IOException e ) {
System.out.println("copy error");
}
}
}
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class test {
static public void main(String[] args) {
File src = new File ( args[0] );
File dst = new File ( args[1] );
try {
FileUtils.copyFile(src,dst);
} catch ( IOException e ) {
System.out.println("copy error");
}
}
}
make
#在output可以得到兩個檔案
1. lib/commons-io-2.4.jar
2. test.jar
#在output可以得到兩個檔案
1. lib/commons-io-2.4.jar
2. test.jar
cd output
java -jar test.jar lib/commons-io-2.4.jar lib/tst
#note : 如果在MANIFEST.MF沒有填寫Class-Path,則下另一個command
java -cp lib/commons-io-2.4.jar -jar test.jar lib/commons-io-2.4.jar lib/tst
java -jar test.jar lib/commons-io-2.4.jar lib/tst
#note : 如果在MANIFEST.MF沒有填寫Class-Path,則下另一個command
java -cp lib/commons-io-2.4.jar -jar test.jar lib/commons-io-2.4.jar lib/tst
沒有留言:
張貼留言