1. 程式人生 > >02-eclipse中構建ant專案和編譯執行ant

02-eclipse中構建ant專案和編譯執行ant

Eclipse中已經集成了Ant,我們可以直接在Eclipse中執行Ant。
1、用 Ant 來構建簡單系統
新建一個 Java project, 命名為Hello
這裡寫圖片描述

Hello .java 檔案內容

package example;

public class Hello {
    public static void main(String[] args) {
        System.out.println("我的專案是ant執行的");
    }
}

bulid.xml 檔案內容

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="default"> <target name="default" depends="depends" description="description"> <javac srcdir="src" destdir="bin" includes="org/**" includeantruntime="true"></javac> <jar basedir="bin" destfile="dist/ant_project.jar">
</jar> </target> <target name="depends"> </target> </project>

熟悉 ant 的同學們對於上面的指令碼應該很容易看明白,這裡就不詳細解釋了,主要功能就是把這個工程編譯然後打成 jar 和 war 包。

2、運用ant

(1)eclipse-右鍵專案-properties-Builders-Add buids(選擇 ant builder):
這裡寫圖片描述

這裡寫圖片描述

(2)Buildfile-點選選擇專案下的build.xml檔案,生成路徑為:${workspace_loc:/ant_project/build.xml}

這裡寫圖片描述

這裡寫圖片描述

Base directory-點選選擇專案名字,生成路徑為:

${workspace_loc:/ant_project}

(3)當前頁面切換到classPath下,add jar(junit.jar,這個jar之前先放在ant_project下面)

(4)去掉java builder勾選,選擇ant builder(可以去掉,也可以不去掉)

這裡寫圖片描述

(5)點選build.xml右鍵—run as —-ant build 開始執行ant命令,構建ant專案以及打包工作。

這裡寫圖片描述

2。上面只是打包了,下面我們做一個打包並且執行的

只需要修改build.xml就可以了

<?xml version="1.0" encoding="UTF-8" ?>
<!-- ant的所有內容必須包含在這個裡邊,name是你給它取的名字,basedir故名思意就是工作的根目錄 .代表當前目錄。default代表預設要做的事情。  -->
<project name="Hello" default="run" basedir=".">
    <property name="mySrc" value="src"/>
    <property name="myClassDirName" value="classes"/>
    <property name="myBuildJarName" value="helloant.jar"/>


    <!-- 
    第一步:初始化
        把你想做的每一件事情寫成一個target ,它有一個名字,depends是它所依賴的target,在執行這個target 
        例如這裡的compile之前ant會先檢查init是否曾經被執行過,如果執行過則直接直接執行compile,如果沒有則會先執行它依賴的target例如這裡的init,
        然後在執行這個target如我們的計劃  
    -->
    <target name="init">
        <!-- 為了不用拷貝,我們可以在最開始定義好目標資料夾,這樣ant直接把結果就放在目標資料夾中了 新建資料夾:   -->
       <mkdir dir="${basedir}/bulid"/>
       <mkdir dir="${basedir}/${myClassDirName}"/>
    </target>



    <!-- 
    第2步:編譯
    -->
    <target name="compile" depends="init">
        <!-- 
            includeantruntime="false"、
            解決:
            [javac] E:\04-scala_eclipse\01-work\Hello\build.xml:46: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
        -->
       <javac srcdir="${mySrc}" destdir="${myClassDirName}" includeantruntime="false" />
    </target>




    <!-- 
    第3步:做jar包
    -->
    <target name="build" depends="compile">
        <!--
            Could not find com.phei.netty.protocol.http.xml.Test. Make sure you have it in your classpath
            主要是解決:
                /Hello/classes 目錄的,編譯後的.class檔案存放位置
         -->
       <jar jarfile="${myBuildJarName}" basedir="${myClassDirName}"/>
       <jar destfile="${basedir}/bulid/${myBuildJarName}" /> <!-- 建立生成的jar包存放位置 /Hello/bulid/helloant.jar -->
    </target>





    <!-- 
    第3步:執行
    -->
    <target name="run" depends="clean,build">
       <java classname="example.Hello" classpath="${myBuildJarName}"/>
    </target>



    <!-- 重新執行  -->
    <target name="rerun" depends="run">
       <ant target="clean" />
       <ant target="run" />
    </target>


    <!-- 
        每次執行前清空,以前執行的東西,比如生成的jar包,編譯的.class檔案
    -->
    <target name="clean">
       <delete dir="${myClassDirName}" />
       <delete file="${myBuildJarName}" />
    </target>

</project>

執行結果

Buildfile: E:\04-scala_eclipse\01-work\Hello\build.xml
clean:
   [delete] Deleting directory E:\04-scala_eclipse\01-work\Hello\classes
   [delete] Deleting: E:\04-scala_eclipse\01-work\Hello\helloant.jar
init:
    [mkdir] Created dir: E:\04-scala_eclipse\01-work\Hello\classes
compile:
    [javac] Compiling 1 source file to E:\04-scala_eclipse\01-work\Hello\classes
build:
      [jar] Building jar: E:\04-scala_eclipse\01-work\Hello\helloant.jar
run:
     [java] 我的專案是ant執行的
BUILD SUCCESSFUL
Total time: 1 second

3。上面都是沒有新增額外的jar的,如果我們lib目錄下,有額外的jar該怎麼辦?

首先看一個測試類

package com.phei.netty.protocol.http.xml;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class Test {

    public static void main(String[] args) throws JSONException {
           ParseJson("{\"name\":\"Alexia\",\"age\":\"23\"}");
           CreateJson();
        }

        //解析JSON
        private static void ParseJson(String jsonString) throws JSONException
        {
            JSONObject jObject = new JSONObject(jsonString);
            System.out.println(jObject.get("name")); 
        }

        //建立一個JSON
        private static void CreateJson() throws JSONException
        {
             // 下面構造兩個map、一個list和一個Employee物件
            Map<String, String> map1 = new HashMap<String, String>();
            map1.put("name", "Alexia");
            map1.put("sex", "female");
            map1.put("age", "23");

            Map<String, String> map2 = new HashMap<String, String>();
            map2.put("name", "Edward");
            map2.put("sex", "male");
            map2.put("age", "24");

            // 將Map轉換為JSONArray資料
            JSONArray jArray = new JSONArray();
            jArray.put(map1);
            jArray.put(map2);
           //定義JSON
            JSONObject jObject=new JSONObject();
            jObject.put("List", jArray);
            jObject.put("Count","1200");

            System.out.println(jObject.toString());
        }
}

然後在lib裡面發放上jar包/Hello/lib/json-20171018.jar

然後配置檔案如下

<?xml version="1.0" encoding="UTF-8" ?>
<!-- ant的所有內容必須包含在這個裡邊,name是你給它取的名字,basedir故名思意就是工作的根目錄 .代表當前目錄。default代表預設要做的事情。  -->
<project name="Hello" default="run" basedir=".">
    <property name="mySrc" value="src"/>
    <property name="myClassDirName" value="classes"/>
    <property name="myBuildJarName" value="helloant.jar"/>

    <!-- 
        [javac] E:\04-scala_eclipse\01-work\Hello\src\com\phei\netty\protocol\http\xml\TestOrder.java:22: 錯誤: 程式包org.jibx.runtime不存在
        [javac] import org.jibx.runtime.BindingDirectory;
    -->
    <property name="lib.home" value="${basedir}\lib"/>  

    <path id="project.classpath">
        <fileset dir="${lib.home}" includes="***.jar" />
    </path>

    <!-- 
    第一步:初始化
        把你想做的每一件事情寫成一個target ,它有一個名字,depends是它所依賴的target,在執行這個target 
        例如這裡的compile之前ant會先檢查init是否曾經被執行過,如果執行過則直接直接執行compile,如果沒有則會先執行它依賴的target例如這裡的init,
        然後在執行這個target如我們的計劃  
    -->
    <target name="init">
        <!-- 為了不用拷貝,我們可以在最開始定義好目標資料夾,這樣ant直接把結果就放在目標資料夾中了 新建資料夾:   -->
       <mkdir dir="${basedir}/bulid"/>
       <mkdir dir="${basedir}/${myClassDirName}"/>
    </target>


    <!-- 
    第2步:編譯
    -->
    <target name="compile" depends="init">
        <!-- 
            includeantruntime="false"、
            解決:
            [javac] E:\04-scala_eclipse\01-work\Hello\build.xml:46: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
        -->
       <javac srcdir="${mySrc}" destdir="${myClassDirName}" includeantruntime="false"  nowarn="on" source="1.8" target="1.8" deprecation="true" debug="true" encoding="UTF-8" classpathref="project.classpath" >
            <compilerarg line="-Xlint:unchecked" />
       </javac>
    </target>




    <!-- 
    第3步:做jar包
    -->
    <target name="build" depends="compile">
        <!--
            Could not find com.phei.netty.protocol.http.xml.Test. Make sure you have it in your classpath
            主要是解決:
                /Hello/classes 目錄的,編譯後的.class檔案存放位置
         -->
       <jar jarfile="${myBuildJarName}" basedir="${myClassDirName}"/>


       <!-- 建立生成的jar包存放位置 /Hello/bulid/helloant.jar -->
       <jar destfile="${basedir}/bulid/${myBuildJarName}" ></jar>

    </target>





    <!-- 
    第4步:執行
    -->
    <target name="run" depends="clean,build">
       <java classname="com.phei.netty.protocol.http.xml.Test" classpath="${myBuildJarName}" classpathref="project.classpath"/>  
    </target>



    <!-- 重新執行  -->
    <target name="rerun" depends="run">
       <ant target="clean" />
       <ant target="run" />
    </target>


    <!-- 
        每次執行前清空,以前執行的東西,比如生成的jar包,編譯的.class檔案
    -->
    <target name="clean">
       <delete dir="${myClassDirName}" />
       <delete file="${myBuildJarName}" />
    </target>

</project>

這裡執行結果如下

Buildfile: E:\04-scala_eclipse\01-work\Hello\build.xml
clean:
   [delete] Deleting directory E:\04-scala_eclipse\01-work\Hello\classes
   [delete] Deleting: E:\04-scala_eclipse\01-work\Hello\helloant.jar
init:
    [mkdir] Created dir: E:\04-scala_eclipse\01-work\Hello\classes
compile:
    [javac] Compiling 1 source file to E:\04-scala_eclipse\01-work\Hello\classes
build:
      [jar] Building jar: E:\04-scala_eclipse\01-work\Hello\helloant.jar
run:
     [java] Alexia
     [java] {"List":[{"name":"Alexia","age":"23","sex":"female"},{"name":"Edward","age":"24","sex":"male"}],"Count":"1200"}
BUILD SUCCESSFUL
Total time: 2 seconds

注意:

1。如果編譯的時候沒有加

classpathref="project.classpath"

會報錯,因為,編譯的時候需要執行的jar包

 [javac] E:\04-scala_eclipse\01-work\Hello\src\com\phei\netty\protocol\http\xml\Test.java:6: 錯誤: 程式包org.json不存在
    [javac] import org.json.JSONArray;
    [javac]                ^
    [javac] E:\04-scala_eclipse\01-work\Hello\src\com\phei\netty\protocol\http\xml\Test.java:7: 錯誤: 程式包org.json不存在
    [javac] import org.json.JSONException;
    [javac]                ^
    [javac] E:\04-scala_eclipse\01-work\Hello\src\com\phei\netty\protocol\http\xml\Test.java:8: 錯誤: 程式包org.json不存在
    [javac] import org.json.JSONObject;
    [javac]                ^
    [javac] E:\04-scala_eclipse\01-work\Hello\src\com\phei\netty\protocol\http\xml\Test.java:12: 錯誤: 找不到符號
    [javac]     public static void main(String[] args) throws JSONException {
    [javac]                                                   ^
    [javac]   符號:   類 JSONException
    [javac]   位置: 類 Test

2。如果執行的時候沒有加

classpathref="project.classpath"

會報錯,因為,執行的時候需要執行的jar包

Buildfile: E:\04-scala_eclipse\01-work\Hello\build.xml
clean:
   [delete] Deleting directory E:\04-scala_eclipse\01-work\Hello\classes
   [delete] Deleting: E:\04-scala_eclipse\01-work\Hello\helloant.jar
init:
    [mkdir] Created dir: E:\04-scala_eclipse\01-work\Hello\classes
compile:
    [javac] Compiling 1 source file to E:\04-scala_eclipse\01-work\Hello\classes
build:
      [jar] Building jar: E:\04-scala_eclipse\01-work\Hello\helloant.jar
run:
     [java] java.lang.NoClassDefFoundError: org/json/JSONException
     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:195)
     [java]     at org.apache.tools.ant.taskdefs.Java.run(Java.java:772)
     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:222)
     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:136)
     [java]     at org.apache.tools.ant.taskdefs.Java.execute(Java.java:109)
     [java]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
     [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     [java]     at java.lang.reflect.Method.invoke(Method.java:498)
     [java]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
     [java]     at org.apache.tools.ant.Task.perform(Task.java:348)
     [java]     at org.apache.tools.ant.Target.execute(Target.java:435)
     [java]     at org.apache.tools.ant.Target.performTasks(Target.java:456)
     [java]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
     [java]     at org.apache.tools.ant.Project.executeTarget(Project.java:1376)
     [java]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
     [java]     at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:36)
     [java]     at org.apache.tools.ant.Project.executeTargets(Project.java:1260)
     [java]     at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:456)
     [java]     at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:140)
     [java] Caused by: java.lang.NoClassDefFoundError: org/json/JSONException
     [java]     at java.lang.Class.getDeclaredMethods0(Native Method)
     [java]     at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
     [java]     at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
     [java]     at java.lang.Class.getMethod0(Class.java:3018)
     [java]     at java.lang.Class.getMethod(Class.java:1784)
     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:143)
     [java]     ... 20 more
     [java] Caused by: java.lang.ClassNotFoundException: org.json.JSONException
     [java]     at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1388)
     [java]     at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1337)
     [java]     at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1095)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
     [java]     ... 26 more
     [java] Java Result: -1
BUILD SUCCESSFUL
Total time: 2 seconds

相關推薦

02-eclipse構建ant專案編譯執行ant

Eclipse中已經集成了Ant,我們可以直接在Eclipse中執行Ant。 1、用 Ant 來構建簡單系統 新建一個 Java project, 命名為Hello Hello .java 檔案內容 package example; publi

關於在ubuntu下eclipsec++11支援編譯執行c++11報錯的解決方法

最近準備升級專案中的c++執行緒部分程式碼用c++11簡單重構一下,結果測試demo直接就報錯~ 百度和谷歌了一部分還是沒有解決這個問題~ 最後經過研究eclipse的自動編譯~終於搞定了~ 首先按照網上說的~ http://hkllzh.iteye.com/blog/1

eclipse構建Maven專案管理工具

1、什麼是Maven? Maven是一個專案管理和綜合工具,它包含了一個專案物件模型 (Project Object Model),一組標準集合,一個專案生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來執

Maven POM 檔案的繼承(Inheritance) 聚合(Aggregation)- IDEA Eclipse 多模組專案的 Maven 組織方法

Maven POM 檔案中的繼承和聚合(Inheritance & Aggregation) 之前在 IDEA 裡建了一個專案專門用來學習,每個知識點都建立一個相應的模組,方便學習和檢視。今天在建第二個模組的時候發現,這個模組很多的 Mave

單獨啟動tomcateclipse啟動tomcat的差異,以及將Eclipse的Web專案部署到Tomcat的方法

         剛接觸java web,對很多東西還不是太瞭解,特別是各種配置方面的問題,下面僅是自己個人的理解,如有錯誤或不足之處,希望大家能指教。          如果通過tomcat的bin目錄下的startup.bat來啟動tomcat,此時tomcat使用co

Eclipse的Android專案編譯後沒有生成R檔案的兩種原因

筆者在用Eclipse寫Android專案,時常發生R檔案錯誤。 對此筆者總結了兩種原因:一種是res目錄下的檔案有Eclipse檢查不出的錯誤,但不能通過編譯,因此沒有生成R檔案。還有一種情況是已經

eclipse的javaweb專案匯出的file systemwar file檔案有什麼區別

在使用eclipse匯出javaweb專案的時候,通常是匯出file system的形式,這樣在重新匯入時可以保證專案的完整性,這樣匯出的專案在匯入進行二次開發的時候可以在原來的基礎上進行編輯但是我們常常也會匯出為war file的形式匯出一個專案(匯出的檔案實際上是一個壓縮

Eclipse 構建 Maven 項目的完整過程

部署 完整 ott ges jdk img class ati 技術分享 進行以下步驟的前提是你已經安裝好本地maven庫和eclipse中的maven插件了(有的eclipse中已經集成了maven插件) 一、Maven項目的新建 1、鼠標右鍵---->New---

EclipseJar包的反編譯(通過jar包查看源碼)

其他 date 文件 eclips 反編譯 AD png clip 下載 很多時候我們在公司工作時,在Eclipse引用其他人封裝好的jar包時是看不到源碼的,這樣一來就不能很好得理解他人的意圖,於是就需要借助反編譯的幫助了。好了,下面是反編譯的正確使用方法。 一、下載ne

如何在Eclipse使用依賴專案(Required projects)代替jar?

   在Eclipse中使用依賴專案(Required projects)替換jar的好處就是可以隨時更改依賴專案中的程式碼,而在主專案中引用到最新的編譯類。這種方式在Debug時用處非常大,避免了每次修改依賴包原始碼後,又打包成jar,並不斷更新主專案jar包的麻煩。在開源專案

eclipseTomcat修改專案名稱

1.開啟你的專案目錄,找到一個.project檔案,開啟後修改<name> test</name>中的值,將test修改成你要修改的名字; 2.在專案目錄下,開啟.settings資料夾,找到org.eclipse.wst.common.component檔案,修改<wb-mo

eclipse建立java專案

注意:安裝前必備環境:安裝eclipse之前必須安裝JDK環境。安裝方法主要有:下載JDK,安裝JDK,配置JDK的環境變數,測設JDK是否安裝好。具體步驟詳見博文: java開發環境搭建 使用eclipse從頭一步步建立java專案   1.下載eclipse 官網地

Eclipse修改Maven專案-jeesite專案名稱

1、選中專案名字,快捷鍵F2修改專案名字,eclipse可能會幫你生成修改名字後新的專案,原來的專案名字不變也還存在IDE中,等下面改完再刪除原來的專案(重eclipse中和資料夾中徹底刪除,為了避免意外,做好先做個備份) 2、修改專案元件名字,選中專案,右鍵選單->Pro

Maven - 在Eclipse建立Maven專案

本文的前提條件: windows7-64bit jdk1.8.0 Maven-3.5.0 1- 更新Eclipse中Maven配置 1.1- 修改Eclipse根目錄下eclipse.ini檔案 D:\DownLoadFiles\eclipse-

Eclipse新建Maven專案沒有java以及test目錄

場景 用Eclipse第一次新建Maven專案,採用Artifact Id為maven-archetype-webapp時, 專案目錄下沒有java以及test目錄。 解決 右擊專案--properties--Java Build Path--Libraties---JRE Syst

eclipse編寫SpringBoot專案的錯誤總結

1、啟動spring boot Application啟動類後,瀏覽器訪問出現這個錯誤   Application啟動類的位置不對.要將Application類放在最外側,即包含所有子包  原因:spring-boot會自動載入啟動類所在包下及其子包下的所有元件

eclipse檢視sources原始碼JavaDoc幫助文件

今天學習Netty的過程中,從官網下載的netty裡面的內容如下: 其中jar資料夾裡面的內容如下: 可以看到每一個具體的jar包就對應有一個sources.jar包,然後所有的幫助文件在javaDoc檔案下面的jar包裡面 那怎麼檢視一個類的原始碼和幫助文件呢??? 當我們在沒有進行相應的配置前,當我

如何在Eclipse建立web專案(親測有效)

1.首先找到Eclipse的選單欄的file,點選File->New->Dynamic Web Project或者右鍵右鍵選擇New->Dynamic Web Project 2.若New的選擇列表中沒有Dynamic Web Project

Docker環境安裝在Tomcat部署靜態專案web專案

Docker 使用記錄 準備工作 linux伺服器一臺 ssh工具一個(主要用登入linux) 獲取該伺服器root許可權 耐心 環境搭建 登入伺服器 1. ssh -p 22 [email protected]

eclipse,add jarsadd library的區別

Add Jars ----新增Jar包,是指本Eclipse當前包含的工程中,在工程列表下選取即可 Add External Jars---新增外部的Jar,是指外部的,需要用檔案管理器,在電腦硬碟上選取。 Add Variable---新增變數,Eclipse的編譯時用