2017-09-04 72 views
0

我需要從包含在jar文件中的gradle任務類執行。從gradle任務執行commons-math Java類

例如,我想創建一個能夠執行類FastMath的Gradle任務(http://commons.apache.org/proper/commons-math/download_math.cgi)。

目前的build.gradle腳本如下:

apply plugin: 'java' 


repositories { 
    mavenCentral() 
} 

dependencies { 
    compile files('/pathToJars/commons-math3-3.6.1.jar') 
} 

task t1 { 
    doLast { 
     println FastMath.abs(3) 
    } 
} 

我收到此錯誤信息:

出了什麼問題: 執行失敗的任務 ':T1'。 無法獲取類型爲org.gradle.api.DefaultTask的任務':t1'的未知屬性'FastMath'。

我明白我缺少類進口,例如添加以下語句,但我不知道如何或在哪裏:

import org.apache.commons.math3.util.FastMath; 

我想知道我做錯了或腳本怎麼了進行配置。任何建議將不勝感激。

編輯1:實際工作的代碼如下:

apply plugin:'java' 
import org.apache.commons.math3.util.FastMath; 

buildscript { 
    repositories { 
    mavenCentral() 
} 

    dependencies { 
     classpath 'org.apache.commons:commons-math3:3.6.1' 
    } 
} 

task t1 { 
    doLast { 
     println FastMath.abs(3) 
    } 
} 

回答

1

那麼,你必須在你的buildscript多個問題。

  1. 如果使用mavenCentral()作爲倉庫,使用依賴從那裏,你將獲得傳遞依賴的分辨率和自動解決衝突,你不必守庫在您的VCS或其它地方,所以compile files('/pathToJars/commons-math3-3.6.1.jar')實際上應該是compile 'org.apache.commons:commons-math3:3.6.1'

  2. 正如你正確地指出,你要麼必須使用完全合格的類名或進口,因此無論是通過println org.apache.commons.math3.util.FastMath.abs(3)更換println FastMath.abs(3),或任何前加import org.apache.commons.math3.util.FastMath。通常情況下,這在文件中是最頂級的,就像Java一樣。

  3. 即使你們兩個都做,它也行不通,因爲你將依賴項添加到實際項目的編譯類路徑中。相反,您需要在build腳本的類路徑中使用它,因此您需要將dependencies塊移動到buildscript塊中,並且如果您遵循了建議1,當然還有repositories塊。在依賴聲明中,您還需要classpath而不是compile