2012-02-13 38 views
0

我有一個帶有ANT構建文件的Eclipse-Java-Project。這個構建文件導出一個項目的jar而不編譯它。所以我只輸出資源。ANT生成的jar:是命名空間的問題嗎?

<target name="jar"> 
    <mkdir dir="/jar"/> 
    <jar destfile="/jar/my_test_jarfile.jar" basedir="/src" /> 
</target> 

我在另一個eclipse java項目中使用這個生成的jar文件,並在項目的build-path-settings中設置jar的路徑。問題是eclipse說它無法解析jar導入類的名字空間。 如果我通過右鍵單擊項目然後「導出」並將該jar添加到另一個項目的構建路徑來手動導出jar,則一切正常,並且沒有錯誤。所以現在的問題是,我做錯了什麼?

+0

re:formatting。我認爲問題在於你需要在非代碼結束和代碼開始之間建立一條新線。之後,你可以添加你得到的特定錯誤堆棧嗎?併爲此問道歉,但是您是否使用了BeyondCompare等工具來驗證這兩個生成的JAR是否相同?或者甚至只是確保它們的尺寸相同?並且 - 再次道歉 - 但它是ANT生成與手動生成的名稱相同的名稱的jar嗎?我只問,因爲類加載器可以創建競爭條件,因爲它以字母順序加載文件(我相信)。 – 2012-02-14 01:07:11

+0

感謝您的格式化。非代碼和代碼之間的新界限是什麼意思?我使用了這樣的工具,但有很多不同之處,但是你不能閱讀它們,我認爲它是二元的。他們都有相同的名字。也許你可以給它一個螞蟻的例子,它創建完全相同的jar,就像你右鍵點擊該項目然後導出一樣。 – tester 2012-02-14 07:38:56

+0

沒關係,似乎我是靠自己解決的。我必須先編譯它。我認爲只有消息來源也可以。但現在它工作。不管怎麼說,還是要謝謝你! – tester 2012-02-14 09:41:17

回答

1

所以這裏是我的解決方案。看起來你必須先編譯源代碼,然後把它打包成一個jar。我不保證這個jar與你從eclipse得到的一樣,當你做正確的點擊操作和導出等時,它是完全一樣的。 但它適用於我,沒有任何命名空間錯誤。所以這裏是我的螞蟻目標的最低版本:

<project default="run" basedir="."> 
    <property name="src.dir" value="src" /> 
    <property name="classes.dir" value="bin" /> 
    <property name="build.dir" value="build" /> 

    <path id="libs"> 
     <fileset dir="lib"> 
      <include name="*.jar"/> 
     </fileset> 
     <pathelement path="${basedir}\${classes.dir}"/> 
    </path> 

    <target name="run"> 
     <antcall target="compile"/> 
     <antcall target="jar"/> 
    </target> 

    <target name="compile"> 
     <javac debug="true" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="libs" encoding="UTF-8" /> 
    </target> 

    <target name="jar"> 
     <jar destfile="${build.dir}/my_jar_file.jar" basedir="${classes.dir}"> 
    </target> 
</project>