我有一个主要的Android应用程序,它的libs文件夹中有2个罐子。这个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 :(得分: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
。这是什么目录?它是另一个项目的源,另一个项目的主目录还是别的什么?
首先,您不应在<src path>
命令中同时使用srcdir
和<javac>
参数。如果只需要单个源目录路径,则可以使用srcdir
任务的<javac>
参数或<src path>
子实体。如果您有多个,则不应使用srcdir
,并且只能使用<src path>
子实体。
现在回到你的问题......
如果我理解正确,您需要在<javac>
任务中指定多个类路径文件夹。您可以通过删除classpath
命令的classpathref
或<javac>
参数来完成此操作,只需指定多个<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>
答案 1 :(得分: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”的引用,这可能是您真正想要进行更改的地方,我注意到这些更改可以获取额外的jar。
答案 2 :(得分:0)
我可以在David的解决方案中建立一条额外的路径。 我添加了一个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