2013-01-22 118 views
0

我有一個主要的android應用程序,它有2個罐子裏的libs文件夾。這個Android應用程序包含一個Java Source Project,它在libs文件夾中有大約4個罐子。多個jar文件夾

在build.xml中,我從android的build.xml中拷貝了'target name =「 - compile'>'。

,並將此:

<do-only-if-manifest-hasCode elseText="hasCode = false. Skipping..." > 

     <!-- merge the project's own classpath and the tested project's classpath --> 

     <path id="project.javac.classpath" > 

      <path refid="project.all.jars.path" /> 

      <path refid="tested.project.classpath" /> 
     </path> 
<javac 
    bootclasspathref="project.target.class.path" 
    classpathref="project.javac.classpath" 
    debug="true" 
    destdir="${out.classes.absolute.dir}" 
    encoding="${java.encoding}" 
    extdirs="" 
    fork="${need.javac.fork}" 
    includeantruntime="false" 
    source="${java.source}" 
    target="${java.target}" 
    verbose="${verbose}" > 
    <src path="${source.absolute.dir}" /> 
    <src path="${gen.absolute.dir}" /> 
    <src path="${javaproject.dir}" /> #THIS IS WHAT I ADDED which is defined in ANT.PROPERTIES 
    <compilerarg line="${java.compilerargs}" /> 
</javac> 

所以它所引用的Java源代碼項目。問題發生在java源項目的jar文件夾中。 我怎麼也包括他們?

ps。將它們複製到android項目的libs文件夾不是一個選項。

+0

構建時類路徑在這種情況下,通過與ID'project.javac.classpath'路徑語句定義控制。如果你可以發佈該片段,應該可以告訴你如何改變它來拾取罐子。 – David

+0

@大衛希望我添加了正確的片段。在標記 – tomi

回答

1

您有以下:

<javac 
    bootclasspathref="project.target.class.path" 
    classpathref="project.javac.classpath" 
    debug="true" 
    destdir="${out.classes.absolute.dir}" 
    encoding="${java.encoding}" 
    extdirs="" 
    fork="${need.javac.fork}" 
    includeantruntime="false" 
    target="${java.target}" 
    verbose="${verbose}" 

    source="${java.source}"> 

    <src path="${source.absolute.dir}" /> 
    <src path="${gen.absolute.dir}" /> 
    <src path="${javaproject.dir}" /> #THIS IS WHAT I ADDED which is defined in ANT.PROPERTIES 

    <compilerarg line="${java.compilerargs}" /> 
</javac> 

通知您指定兩個source參數和<src path>子實體。另請注意,您有對javaproject.dir的引用。這個目錄是什麼?它是另一個項目的源頭,另一個項目的主目錄還是別的?

首先,您不應該在您的<javac>命令中同時使用<src path>srcdir參數。如果只需要一個源目錄路徑,則可以使用<javac>任務的srcdir參數或<src path>子實體。如果您有多個,則不應使用srcdir,而只能使用<src path>子實體。

現在回到你的問題......

如果我理解正確的話,你想在你<javac>任務指定多個類路徑的文件夾。您可以通過刪除<javac>命令的classpathclasspathref參數來執行此操作,並且只需指定多個<classpath path>子實體,就像您使用源目錄一樣。

我想你想是這樣的:

<javac 
    bootclasspathref="project.target.class.path" 
    debug="true" 
    destdir="${out.classes.absolute.dir}" 
    encoding="${java.encoding}" 
    extdirs="" 
    fork="${need.javac.fork}" 
    includeantruntime="false" 
    target="${java.target}" 
    verbose="${verbose}"> 

    <!-- Here I can specify multiple classpaths: --> 
    <!-- Either classpath references, or classpath elements --> 
    <classpath refid="project.javac.classpath"/> 
    <classpath refid="some.other.classpath.reference"/> 
    <classpath path="${some.actual.directory.with.jars}"/> 

    <src path="${java.source}"> 
    <src path="${source.absolute.dir}" /> 
    <src path="${gen.absolute.dir}" /> 
    <!-- <src path="${javaproject.dir}" /> Is this correct? --> 

    <compilerarg line="${java.compilerargs}" /> 
</javac> 
+0

你一直很大的幫助。謝謝。 回答以下問題: javaproject.dir =另一個項目的src目錄。關於'source'參數的 ,它所做的只是告訴javac java版本是1.5。 和'srcdir'參數我從不使用它。 – tomi

+0

以上評論不正確。 仍然無法正常工作。當我編譯時,我得到以下錯誤,因爲庫不存在: [javac] /somepath/src/si/sis/toliti/game/button/BoardButton.java:13:找不到符號 [javac] symbol:class Sprite [javac] location:class si.sis.toliti.game.button.BoardButton [javac] \t private Sprite buttonSprite; 回答問題: javaproject.dir =其他項目的src目錄。關於'source'參數的 ,它所做的只是告訴javac java版本是1.5。 和'srcdir'參數我從不使用它。 – tomi

+0

對不起。與'source'混淆的'srcdir'。 –

0

您可以構建一個<path>以包含構建時項目所依賴的所有jar,並在您的<javac>任務中引用它。你已經將後者與classpathref一起工作到「project.javac.classpath」,所以你需要讓這個路徑包含jar。

例如:

<path id="project.javac.classpath"> 
    <path refid="project.all.jars.path" /> 
    <path refid="tested.project.classpath" /> 
    <!-- include all the jar files under /path/to/your/jars" --> 
    <fileset dir="/path/to/your/jars"> 
     <!-- the **/* pattern recurses subdirectories --> 
     <include name="**/*.jar"/> 
    </fileset> 
</path> 

這條道路包括對「project.all.jars.path」,這可能是在那裏你真的想讓我注意到拿起額外的罐子進行的調整。

+0

之上檢查我的原始帖子不起作用。啓動時,我得到錯誤: E/AndroidRuntime(17393):引起:java.lang.ClassNotFoundException:package.name.MainActivity – tomi

0

它爲我打造大衛的解決方案下的其他路徑。 我添加了一個if條件來檢查是否需要額外的lib路徑。

<condition property="android.additional.libdir.enabled" value="true" else="false"> 
    <and> 
     <isset property="android.additional.lib.dir" /> 
    </and> 
</condition> 

<if condition="${android.additional.libdir.enabled}"> 
    <then> 
     <path id="project.javac.classpath"> 
      <path refid="project.all.jars.path" /> 
      <path refid="tested.project.classpath" /> 
      <fileset dir="${android.additional.lib.dir}"> 
       <include name="**/*.jar"/> 
      </fileset> 
     </path> 
    </then> 
    <else> 
     <path id="project.javac.classpath"> 
      <path refid="project.all.jars.path" /> 
      <path refid="tested.project.classpath" /> 
     </path> 
    </else> 
</if> 

在ant.properties文件中,指定附加的lib目錄路徑。

android.additional.lib.dir=yourpath