ant-ivy-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nicolas Lalevée <nicolas.lale...@hibnet.org>
Subject Re: IvyDE workspace resolver & classpath container not playing well with AndroidDependencies classpath container...
Date Thu, 17 May 2012 12:54:00 GMT

Le 16 mai 2012 à 19:18, Brian Anderson a écrit :

> I am using Ivy 2.3.0 and IvyDE (2.2.0beta1) together with the Android SDK (rev 19) to
manage dependencies in a collection of Android projects.
> 
> I have multiple Android projects, each with an ivy.xml file describing dependencies.
 Some of these Android projects are so-called Android library projects, others are Android
application projects.  My goal is to produce artifacts from Android library projects that
can be published and subsequently used in another Android project as a dependency via Ivy.
 (Strictly speaking, Android library projects currently have no exportable jar artifact. 
The claim is that this will be supported in future revs of the Android SDK.  None the less,
the SDK does produce a "classes.jar" file that I am using as the library project artifact.
 This is working for my purposes.)  I have more or less been successful in accomplishing this...I
can produce artifacts from library projects (i.e. "foo.jar"), publish them to a Nexus repo
and subsequently use these artifacts in another Android project by declaring an appropriate
dependency in ivy.xml associated with the referring Android project.  I have a small Ant build
wrapper that resolves dependencies and retrieves the resolved dependencies, placeing them
into the proper place in the referring Android project (libs/) such that the stock Android
SDK Ant build can pick them up and use them.  All is well.
> 
> Of course, I would like all of this to work in Eclipse via IvyDE when I am working on
a collection of Android projects and library projects that they depend on within a workspace.
 Having recently discovered the IvyDE workspace resolver, I elected to try this to manage
dependencies between Android projects and dependent library projects.  Note that I am trying
to avoid having the Android project declare its dependency on a library project using the
stock Android SDK mechanism (via project.properties).  If I can avoid having to declare Android
project library dependencies via the stock Android SDK mechanisms I can avoid having to modify
my project files when working in Eclipse versus when working with the command line build.
> 
> I have setup IvyDE to retrieve dependencies into the libs/ directory.  I have done this
by editing the Ivy classpath container configuration as follows:
> 
>  - Build the classpath with: retrieved artifacts
>  - Retrieve pattern: libs/[artifact]-[revision].[ext]
>  - Delete old retrieved artifacts: true
>  - Types: *
> 
> I have also enabled "Resolve dependencies in workspace" and ensured that my ivy.xml files
have a status="integration" per the IvyDE workspace resolver instructions.
> 
> This configuration ensures that the AndroidDependencies classpath container (provided
by the Android SDK) will properly pickup project dependencies from the libs/ directory.  This
works fine for external dependencies (given that there is an actual artifact that can be copied
into the libs/ directory for the AndroidDependencies classpath container to pick up), but
not with Android library project dependencies that the workspace resolver deals with.  The
IvyDE workspace resolver appears to be working correctly as far as placing workspace dependencies
into the Ivy classpath container, but there is no apparent way to insert a reference into
the AndroidDependencies classpath container so that the project will build correctly with
the library project dependencies.
> 
> I suppose one might suggest that this is a deficiency with the AndroidDependencies classpath
container.

This is indeed not possible. The classpath container of Android is managed by the Android
plugin, it cannot be modified by an external plugin. At least I checked, the Android plugin
doesn't offer any extension point to do so.

> Another way would be to have the workspace resolver somehow inject an artifact from the
workspace dependency that can be "retrieved" and copied via a retrieve pattern into the libs/
directory for the AndroidDependencies classpath container to pickup.

What would be that artifact ? There is no way to be sure how to package an Eclipse project,
some build is involved. IvyDE cannot do that either.

>  I'm not clear what the kind of reference the workspace resolver injects into the Ivy
classpath container.

IvyDE use the JDT API, it add a reference to the dependent project, just like you would do
manually in the "Java Build Path". It is then the responsibility of the JDT to properly build
the classpath with that.

I don't know the Android SDK, but isn't it possible to let the classpath be managed by the
IvyDE container ? Let you dependency be in the IvyDE container and not in the Android container
?

Nicolas


Mime
View raw message