android - 为什么使用 Ivy 解决依赖关系在 Android 的 "-pre-build"Ant 目标中不起作用?

标签 android ant ivy

由于 Android Java 项目使用 Ant 作为构建工具,因此使用 Ivy 进行依赖管理对我来说似乎是一个自然的选择。然而,虽然基本设置工作正常,但我遇到了一个奇怪的问题。我创建了一个 fork of an existing example on GitHub轻松重现问题。

重点是,依赖项可以很好地下载到“libs”目录中,但是 ant debug 调用的构建过程似乎没有找到 JAR。 但是,如果我调用“resolve”目标不是作为我重载的“-pre-build”目标的一部分,而是像 ant resolve debug 中那样手动调用,它会工作正常。

我已经验证了这些库确实在“-pre-build”完成之前就在“libs”中(通过将“libs”中的文件列为“-pre-build”目标的一部分),所以我真的很想知道为什么找不到它们。

要重现,重要的是在运行 ant 之前从“libs”中删除库。知道这里出了什么问题吗?

resolve:
[ivy:retrieve] :: Apache Ivy 2.3.0-rc1 - 20120416000235 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: loading settings :: file = /Users/seschube/development/IvyAndroidExample/ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: com.example#ivy-android-example;0.1
[ivy:retrieve]  confs: [default]
[ivy:retrieve]  found org.acra#acra;4.2.3 in acra
[ivy:retrieve]  found com.google.inject#guice;2.0-no_aop in maven2
[ivy:retrieve]  found com.google.zxing.core#core;1.6 in zxing
[ivy:retrieve] :: resolution report :: resolve 115ms :: artifacts dl 5ms
    ---------------------------------------------------------------------
    |                  |            modules            ||   artifacts   |
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
    ---------------------------------------------------------------------
    |      default     |   3   |   0   |   0   |   0   ||   4   |   0   |
    ---------------------------------------------------------------------
[ivy:retrieve] :: retrieving :: com.example#ivy-android-example
[ivy:retrieve]  confs: [default]
[ivy:retrieve]  4 artifacts copied, 0 already retrieved (1195kB/76ms)

-pre-build:
     [echo] The "libs" directory contains: acra-4.2.3.jar;core-1.6.jar;guice-2.0-no_aop-javadoc.jar;guice-2.0-no_aop.jar

-code-gen:
[mergemanifest] Merging AndroidManifest files into one.
[mergemanifest] Manifest merger disabled. Using project manifest only.
     [echo] Handling aidl files...
     [aidl] No AIDL files to compile.
     [echo] ----------
     [echo] Handling RenderScript files...
[renderscript] No RenderScript files to compile.
     [echo] ----------
     [echo] Handling Resources...
     [aapt] Generating resource IDs...
     [echo] ----------
     [echo] Handling BuildConfig class...
[buildconfig] Generating BuildConfig class.

-pre-compile:

-compile:
    [javac] Compiling 3 source files to /Users/seschube/development/IvyAndroidExample/bin/classes
    [javac] /Users/seschube/development/IvyAndroidExample/src/com/example/IvyAndroidExampleActivity.java:7: error: package org.acra does not exist
    [javac] import org.acra.*;
    [javac] ^
    [javac] /Users/seschube/development/IvyAndroidExample/src/com/example/IvyAndroidExampleActivity.java:8: error: package com.google.inject does not exist
    [javac] import com.google.inject.*;
    [javac] ^
    [javac] /Users/seschube/development/IvyAndroidExample/src/com/example/IvyAndroidExampleActivity.java:9: error: package com.google.zxing does not exist
    [javac] import com.google.zxing.*;
    [javac] ^
    [javac] 3 errors

BUILD FAILED

最佳答案

我已经知道发生了什么:Android SDK 的 build.xml 添加了来自 libs 的所有 JAR。目录到 project.all.jars.path属性(property)作为-build-setup的一部分目标。但如果 Ivy 的 retrieve 还为时过早目标作为 -pre-build 的一部分被调用,因为 -build-setup-pre-build 之前调用.所以-pre-build ,虽然意味着被覆盖,但却是错误的地方。因为似乎没有其他“虚拟”目标意味着在 -build-setup 之前被覆盖被调用,我现在覆盖 -build-setup在我的 build.xml 文件中,版本取决于 retrieve和原来的-build-setup像这样:

<target name="-build-setup" depends="retrieve,android_rules.-build-setup" /> .

关于android - 为什么使用 Ivy 解决依赖关系在 Android 的 "-pre-build"Ant 目标中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977077/

相关文章:

java - 错误日志中缺少行号和 java 文件名

c# - MVVMCross Spinner - SelectedItem 不工作?

android - 使用 Sinch 发送消息总是失败

java - 使用ant命令行添加jar文件在java项目中添加类

java - 如何使用ivy发布原生库?

spring - 我应该如何知道 Ivy 依赖项中有哪些可用配置?

java - 如何将文件夹的 url 提供给 ivy 模式

java - "for (int clickableId : clickableIds)"有什么作用?

java - Eclipse 中的编译器合规性错误

java - 如何防止ant创建具有不同哈希值的zip?