【问题标题】:Adding jar file to add class in a java project using ant command line使用ant命令行添加jar文件以在java项目中添加类
【发布时间】:2015-08-07 19:06:11
【问题描述】:

我在网上找了几个小时,但找不到以下问题的答案... 我有一个在 MacOSX 上使用“ant release”命令行运行良好的 android 项目(由于各种原因,我不能使用 Eclipse 或 Android Studio 等)。我需要扩展一个包含在 jar 文件(称为 mididriver.jar)中的第 3 方类。 我在我的主要 java 源文件中添加了以下行:

导入 mididriver.*;

我需要添加什么到我的 build.xml 文件中,我应该将 mididriver.jar 文件放在我的项目文件夹结构中的什么位置,这样它就不会给我一个“包 mididriver 不存在”错误?

非常感谢(提前)!

这是我的 build.xml 的内容,在我添加新类之前可以使用:

<project name="MyProject" default="debug">
  <loadproperties srcFile="local.properties"/>
  <loadproperties srcFile="project.properties"/>
  <target name="clean" depends="android_rules.clean">
    <delete dir="libs"/>
    <delete dir="obj"/>
    <exec executable="${ndk.dir}/ndk-build" dir="${basedir}" failonerror="true">
      <arg value="clean"/>
    </exec>
  </target>
  <target name="-pre-build">
    <condition property="makefileConfig" value="Debug" else="Release">
      <equals arg1="${ant.project.invoked-targets}" arg2="debug"/>
    </condition>
    <condition property="ndkDebugValue" value="NDK_DEBUG=1" else="NDK_DEBUG=0">
      <equals arg1="${ant.project.invoked-targets}" arg2="debug"/>
    </condition>
    <condition property="app_abis" value="armeabi-v7a" else="armeabi-v7a">
      <equals arg1="${ant.project.invoked-targets}" arg2="debug"/>
    </condition>
    <exec executable="${ndk.dir}/ndk-build" dir="${basedir}" failonerror="true">
      <arg value="--jobs=2"/>
      <arg value="CONFIG=${makefileConfig}"/>
      <arg value="${ndkDebugValue}"/>
      <arg value="APP_ABI=${app_abis}"/>
    </exec>
    <delete file="${out.final.file}"/>
    <delete file="${out.packaged.file}"/>
  </target>
  <import file="${sdk.dir}/tools/ant/build.xml"/>
</project>

【问题讨论】:

    标签: java android ant jar import


    【解决方案1】:

    在你的项目中创建一个 lib 目录

    my-project
       src
       target
       lib
    

    将jar放入lib目录。

    修改 javac 任务,将 lib 目录添加到类路径中。

    <path id="lib.dir">
        <fileset dir="./lib">
            <include name="**/*.jar"/>
        </fileset>
    </path>
    
    <javac srcdir="src" destdir="target/classes" >
       <classpath refid="lib.dir"/>
    </javac>
    

    我不知道哪个目标不适合你。是javac吗?还是ndk-build?我不知道如何为 ndk-build 指定类路径。一定有-classpath之类的选项。

    【讨论】:

    • 谢谢@Oleg。由于我没有定义 src.dir 或 target.classes.dir 变量,我试图对它们进行硬编码,但出现以下错误: Buildfile: /Users/AG/Documents/MyProject/Builds/Android/build.xml [ javac] /Users/AG/Documents/MyProject/Builds/Android/build.xml:10: 警告:'includeantruntime' 未设置,默认为 build.sysclasspath=last;为可重复构建设置为 false [javac] 将 1 个源文件编译到 /Users/AG/Documents/MyProject/Builds/Android/bin/classes BUILD FAILED /Users/AG/Documents/MyProject/Builds/Android/build.xml:10 : 未找到引用 libs.dir。
    • 请在编辑后的问题中查看我的 build.xml 文件。这在我添加新类 (mididriver.jar) 之前有效(我能够使用 ant release 命令编译和运行应用程序)。
    • @DrMad 我根据真实的构建文件修改了我的答案
    • 现在更糟了......我得到“包 android.app 不存在”,“包 android.content 不存在”等,而且它仍然找不到新的 jar 文件(“包mididriver 不存在”)。我很绝望...... :(
    【解决方案2】:

    好吧,在尝试定义lib文件夹多次失败后,我将jar文件放在现有的libs文件夹中,现在构建成功......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2016-08-31
      • 2012-06-28
      • 2020-01-07
      • 1970-01-01
      相关资源
      最近更新 更多