2012-11-07 155 views
0

我也碰到過同樣的問題,因爲這Proper usage of Apache Commons Configuration即下議院郎不包括作爲一個依賴。失敗ANT建立在缺少依賴

儘管Eclipse和IDEA都撿起來,從ANT javac還沒有。

<javac debug="true" destdir="${build.classes.dir}" srcdir="${src.dir}" includeantruntime="false"> 
    <classpath refid="build.classpath"/> 
</javac> 

我想構建服務器能夠拿起這些依賴性問題,如果有人有他們錯過了構建失敗。

+0

你的意思是編譯實際編譯沒有所需的依賴關係? – weltraumpirat

回答

0

Suresh Koya是接近的,但有幾個問題:如果commons-lang.jar實際上是在當前目錄

  • Suresh的方式才起作用。
  • 如果罐子被稱爲commons-lang-2.6.jar之類的東西,它也不起作用。

第一個可以通過將<filepath>子實體添加到<available>來修復。這給<available>條件一個目錄路徑來搜索jar。但是,如果用戶下載了commons-lang版本號(就像從Maven存儲庫中獲得的版本號一樣),它將不起作用。

爲了解決這個問題,你需要使用類似<fileset>的東西來創建一個路徑資源,然後檢查你是否拿起任何版本的commons-lang jarfile。您可以在下面看到我正在查找以commons-lang開頭並具有.jar後綴的任何文件。

後,我把我的資源,我可以用一個<resoucecount>條件,看我拿起commons-lang任何版本:

<path id="commons-lang.path"> 
    <fileset dir="${lib.dir}"> 
     <incude name="commons-lang*.jar"/> 
    </fileset> 
</path> 

<fail message="Missing commons-lang Jar"> 
    <condition> 
     <resourcecount refid="commons-lang.path" 
      when="equals" count="0"/> 
    </condition> 

現在,如果我知道一些關於公共琅罐子,我可以使用的<available>條件在我的類路徑來搜索特定類:

<fail message="Can't find commons-lang Jar"> 
    <condition> 
     <not> 
      <available classname="org.apache.commons.lang.Entities"> 
       <classpath refid="compile.classpath"/> 
      </available> 
     </not> 
    </condition> 
</fail> 

釷無論它叫什麼,都會發現commons-lang jar。

如果你感興趣的常春藤,我在GitHub一個項目,使得它很容易常春藤添加到整個開發網站。第三方依賴管理是要走的路。使用艾維很棒,因爲它與Ant集成。 Maven和Gradle有它們的優點,但是您必須重新構建整個構建基礎架構才能使用它們。

0

使用ivy來管理自己的作品第三方的依賴。

<ivy:cachepath pathid="build.classpath"> 
    <dependency org="commons-lang" name="commons-lang" rev="2.6" conf="default"/> 
</ivy:cachepath> 

默認情況下ivy將Maven的中央存儲庫下載(和緩存),並意識到傳遞依賴(依賴的依賴)的。