一、開發環境
1.內建開發環境
配置Java運作時環境(JDK)、Eclipse、NetBeans這些開發工具
2.獨立開發環境
僅需要配置Java運作時環境(JDK):
(1)下載下傳jdk解壓;
(2)修改環境參數/etc/bash.bashrc:
#add fot aosp build tony/2015/1/13
export JAVA_HOME=/opt/java/jdk1.6.0_45
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME/lib:$JAVA_HOME
二、代碼的編譯以及運作
對于寫Java程式而言,我們主張源檔案與class檔案都有相同的目錄結構,這樣不僅會友善代碼的組織管理,也使得在編譯以及運作Java程式時少犯錯誤。
1:位于預設包下的檔案的編譯以及運作(沒有顯式寫package的.java檔案檔案都是屬于預設包的)
(1)檢視源檔案Test.java && A.java
(我們發現這兩個Java檔案中并沒有package語句,是以這兩個檔案同屬于一個預設包中。)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX4FEVOFzZq5EMnRlTzhGSiZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DN4YTO1gDM0ETOyUDM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
//src/Test.java
public class Test {
public static void main(String[] args){
A a = new A();
a.setValue(10);
System.out.println(a.getValue());
}
}
//src/A.java
class A{
private int value;
public A(){
value = 0;
}
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}
(2)編譯java:javac Test.java
(3)運作java:java Test
2:位于自定義package(包)的檔案的編譯以及運作(顯式寫package)
(1)檢視源檔案Test.java && A.java
///src/a_package/A.java
package a_package;///使用package
public class A{
private int value;
public A(){
value = 0;
}
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}
///src/Test.java
import a_package.*;///使用package
public class Test{
public void static void main(String[] args){
A a = new A();
a.setValue(10);
System.out.println(a.getValue());
}
}
(2)編譯java:javac Test.java
要想成功編譯java檔案,需要有classpath 和 PACKAGE 包名的共同配合。
.CLASS類發現規則:class檔案所在目錄 = classpath + '\' + 包名(包名中的'.'全變成'\')
!!!!!Java就是靠這個規則來尋找需要的class檔案的。
(3)運作java:java Test
運作指定了package程式時,需要顯示的寫出其包名,即:java packagename.classname,其遵循與class檔案一樣的尋找規則,即在classpath+packagename中'.'變成'\' 所表示的路徑下能夠找到相應的classname所指的class檔案。
三、關于JAR包:如何打jar包以及使用jar包?
0.何為jar包?
JAR(Java Archive,Java 歸檔檔案)是與平台無關的檔案格式,它允許将許多檔案組合成一個壓縮檔案。為 J2EE 應用程式建立的 JAR 檔案是 EAR 檔案(企業 JAR 檔案)。
JAR 檔案格式以流行的 ZIP 檔案格式為基礎。與 ZIP 檔案不同的是,JAR 檔案不僅用于壓縮和釋出,而且還用于部署和封裝庫、元件和插件程式,并可被像編譯器和 JVM 這樣的工具直接使用。在 JAR 中包含特殊的檔案,如 manifests 和部署描述符,用來訓示工具如何處理特定的 JAR。
1.如何打jar包--概述?(參見:http://lishumingwm163-com.iteye.com/blog/954061)
(1)打包根目錄下面的檔案: jar cvf filename.jar a.class b.class
(2)打包帶package的檔案:jar cvf filename.jar foldername 或 jar cvf filename.jar foldername\*
(3)打包可執行jar包(有main入口的):
A.先配置manifest.mf檔案,内容如下:
Main-Class: com.TestBean///指定入口函數,說明預設執行com.TestBean的main函數。
Class-Path: lib\classes12.jar///配置依賴jar包
B.打包方法:jar cvfm filename.jar manifest.mf(指定配置檔案) *.class(class包) lib\classes12.jar(依賴包)
或者同(2)
C.執行方法:java -jar filename.jar
下面一一介紹。
2.打包jar包 以及 使用jar包?(針對屬于預設包的class檔案打包:無package顯示)
(1)打包:(前提是:已經編譯完成的class檔案(含java源檔案))
A.java源檔案如下:
public class A{
private int value;
public A(){
value = 0;
}
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}
打包指令:
[email protected]:~/test-jar-1$jar -cvf test.jar A.class
added manifest
adding: A.class(in = 345) (out= 248)(deflated 28%)
[email protected]:~/test-jar-1$
(2)使用jar包:如果對屬于預設包的class檔案打包,則隻要把jar包路徑添加到classpath中即可使用,無需再在程式中使用import。測試執行個體如下:
test_jar.java
public class test_jar{
public static void main(String[] args){
A a = new A();
}
}
3.打包jar包 以及 使用jar包?(針對屬于非預設包的class檔案打包:有package顯示)
(1)将要打包成jar的package:a_package (其下) 以及 測試(使用jar包)的測試程式test_jar_package.java
<span style="font-size:18px;">//D:<span style="font-size:18px;">a_package</span>/A.java
package <span style="font-size:18px;"> a_package</span>;
public class A{
private int value;
public A(){
value = 0;
}
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}</span>
(2)打包jar包:jar -cvf a-package.jar a_package/(前提是a-package檔案夾下的A.java 已經編譯完成如(1)所示)
(!如果對屬于預設包的class檔案打包,則隻要把jar包路徑添加到classpath中即可使用,無需再在程式中使用import!)
打包後的jar檔案是:a-package.jar
該jar包的具體組成是:
(3)測試執行個體------編譯運作測試程式:使用jar包
import a_package.*;/必須得有此import,因為A.class位于a_package包中。如果不寫則編譯不通過。
///!如果對屬于預設包的class檔案打包,則隻要把jar包路徑添加到classpath中即可使用,
///無需再在程式中使用import!)
public class Test{
public static void main(String[] args){
A a = new A();
a.setValue(10);
System.out.println(a.getValue());
}
}
4.打包jar包 以及 使用jar包?(可以直接運作的jar包: java -jar test.jar=====必須保證有main()入口)
(可以參見:http://jingyan.baidu.com/article/3c48dd344a2146e10be3588c.html)
(1)待測試源碼的編譯:
///test/test_jar.java
package test; //指定上級檔案夾(package)的名字
public class test_jar{
public static void main(String[] args){
System.out.println("hello jar...!");
}
}
///javac test_jar.java
(2)打包已經編譯好的源碼為jar包(jar cvf my-test.jar test/)
(3)修改manifest腳本:添加主函數入口(main)---即添加最後一行(注意:後有空格額!)
打開可以使用
(4)運作jar 檔案(java -jar my-test.jar)
四、利用Makefile自動編譯運作Java程式
下面給出一個簡單的例子:這個例子中,沒有手動設定Windows的環境變量,而是用-classpath指定,這樣友善在不同機器之間移植。
1.項目結構
(1)make 前(編譯前)(隻含有java源檔案和某些目錄)
(2)make 後(編譯後)(包含最終生成的class檔案)
2.項目源碼
<span style="font-size:18px;">//A.java
package package1;
public class A{
private int value;
public A(){ value = 0; }
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}
//B.java
package package1;
public class B{
private String name;
public B(){ name = null; }
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
//C.java
package package2;
public class C{
private String name;
public C(){ name = null; }
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
//Test.java
import java.util.*;
import package1.*;
import package2.*;
public class Test{
public static void main(String[] args){
A a = new A();
B b = new B();
C c = new C();
a.setValue(3);
b.setName("Java");
c.setName("Test");
System.out.println(a.getValue());
System.out.println(b.getName());
System.out.println(c.getName());
}
}</span>
<span style="font-size:18px;">//Makefile
target:
javac ./package1/A.java -d ../classes
javac ./package1/B.java -d ../classes
javac ./package2/C.java -d ../classes
javac ./main/Test.java -d ../classes/main/ -classpath ../classes
run:
java -classpath ../classes/main;../classes Test
clean:
rm -rf ../classes/package1/*.class
rm -rf ../classes/package2/*.class
rm -rf ../classes/main/*.class</span>
解析makefile:編譯/運作java檔案時,都可能需要用到 .class 檔案,是以需要指定classpath的路徑
3.項目編譯&&運作
(1)編譯:
make
D:\Java\project\src>make
javac ./package1/A.java -d ../classes
javac ./package1/B.java -d ../classes
javac ./package2/C.java -d ../classes
javac ./main/Test.java -d ../classes/main/ -classpath ../classes
(2)運作:
make run
D:\Java\project\src>make run
java -classpath ../classes/main;../classes Test
3
Java
Test
這樣,其實我們完全可以不用Eclipse、Netbeans等開發工具就能自己編譯運作自己的系統了。當然這僅僅是限于小工程或是更好的了解編譯/運作java程式的過程,對于大型工程還是需要IDE 工具開發,以提高效率。