2017-06-15 65 views
0

I'm一個相當新的螞蟻和我正嘗試螞蟻目標是通過Java的稱爲內發送電子郵件發送郵件。我正在使用Netbeans IDE。運行ant目標通過java

螞蟻:

<project name="AntTargets" default="main" basedir="."> 
<description>Builds, tests, and runs the project AntTargets.</description> 
<import file="nbproject/build-impl.xml"/> 

<target name="run" depends="jar"> 
    <java classpathref="AntTargets.classpath" fork="true" classname="Client" /> 
</target> 

<target name="main"> 
    <echo message="******************[MAIN]******************"/> 
    <property file="nbproject/build.properties"/> 
    <property name="to" value="${builder}" /> 
    <property name="from" value="${builder}" /> 
    <property name="server" value="${server}" /> 
    <property name="port" value="${port}" /> 

    <mail mailhost="${server}" mailport="${port}" subject="Test build"> 
     <from address="${from}"/> 
     <replyto address="${to}"/> 
     <to address="[email protected]"/> 
     <message>The build has been completed</message> 
    </mail> 

    <echo message="Email to ${to} from ${from} has been sent using the server ${server} on port ${port}."/> 
</target> 

</project> 

的Java:

import java.io.File; 
import org.apache.tools.ant.Project; 
import org.apache.tools.ant.ProjectHelper; 

public class AntTargets { 

public static void main(String[] args) { 
    //get new file 
    File buildFile = new File("build.xml"); 

    //create new project 
    Project p = new Project(); 
    p.setUserProperty("ant.file", buildFile.getAbsolutePath()); 
    p.init(); 

    //initialize helper 
    ProjectHelper helper = ProjectHelper.getProjectHelper(); 
    p.addReference("ant.projectHelper", helper); 

    //parse and execute 
    helper.parse(p, buildFile); 
    p.executeTarget(p.getDefaultTarget()); 
} 
} 

當我直接執行ant一部分,屬性文件被發現,閱讀和整體工作,但是郵件的部分給了我這個錯誤:

Failed to send email: javax.mail.internet.MimeMessage 
build.xml:16: 
java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage 

當我用java調用它,我得到:

Reference AntTargets.classpath not found. 
BUILD FAILED (total time: 0 seconds) 

我將不勝感激任何幫助和整體傾斜。

+0

AntTargets.classpath包含什麼 – Ishnark

+0

我不知道。我在包含* classpathref *之後發生了另一個錯誤 – MiXT4PE

回答

1

問題是螞蟻不知道什麼AntTargets.classpath是。

必須定義CLASSPATH變量,並給它id="AntTargets.classpath。在這個路徑變量中,你應該定義你使用的庫的物理位置。 (你應該看看創建路徑變量,以減少代碼冗餘,特別是當你要使用不同的Ant目標相同的路徑。)

下面是一個例子:假設你的項目需要在運行時GSON庫。

  1. 首先,創建該庫的路徑。假設你有一個lib目錄下的庫。

    <path id="library.gson-2.8.0.classpath"> <pathelement location="${basedir}/lib/gson-2.8.0.jar"/> </path>

    執行相同的其他依賴關係也是如此。

  2. 接下來,創建一個將包含所有這些依賴項的路徑,以便您可以將所有依賴項作爲一個變量引用。這將是你AntTargets.classpath

    <path id="AntTargets.classpath"> <path refid="library.gson-2.8.0.classpath"/> ...... <!-- Add paths for your other dependencies by refid here--> </path>

  3. 現在,當您使用AntTargets.classpath Ant就會知道那是什麼,並用它來運行你的罐子。

我注意到你在run目標使用,所以如果你想從你自己的jar運行客戶端類,包括在你的類路徑中。還請記住,「客戶」可能信息不足 - 您必須提供該類的完全限定名稱,包括包名稱,例如,像「com.package.Client」。

編輯:

我只注意到你直接用Ant運行變得異常。您需要在我們創建的這個路徑變量中包含javax.mail庫。這應該可以解決這個問題。

編輯2:

我似乎有誤解。我以爲你的ant任務試圖調用你的Java程序來發送郵件,但它不能,因爲它不知道javax.mail.jar在哪裏,所以我指示你將它添加到classpath 。

但你做的是:

  1. 使用Ant郵件任務發送郵件。
  2. 而在Java中,您要讀取構建文件並執行發送郵件的目標。

以下是關於此的一些信息:mail是一個Ant任務,需要javax.mail庫,如果您要使用某些參數。看看thisthis這幾個問題,我發現你應該放置$ {ANT_HOME}/lib,即你的ant.jar在哪裏,以便Ant的類加載器可以把它拿起來並使用它。在這種情況下,如果我對你想要的東西的假設是正確的,那麼你應該能夠擺脫AntTargets.classpath,因爲實際上,你的構建文件不需要知道你如何調用它的任何目標。

+0

我試圖通過將mail.jar添加到位於「C:\ Program Files \ NetBeans 8.2 \ extide \ ant」下的Netbeans中的ant目錄直接運行ant來修正錯誤\ LIB」。如果我有任何結果,我會嘗試您的解決方案並報告回來。非常感謝您的意見! – MiXT4PE

+0

我現在得到一個不同的錯誤,但我認爲我更進一步: ' <路徑ID = 「library.mail.classpath」> '結果* Mainclass com.package.Client找不到* – MiXT4PE

+0

您確實在做'com.example.Client'嗎?我把那裏作爲一個例子,因爲我不知道你的班級在哪裏。你應該用適當的包裹信息替換它 – Ishnark