On 28 Feb 2014, at 01:17, William Ferguson <william.fergu...@xandar.com.au> 
wrote:

> As part of the development of the android-maven-plugin we have need to add
> in an AbstractMavenLifecycleParticipant so that we can modify the compile
> classpath to add artefacts that are contained within a project's
> dependencies. Igor provided a lot of the coaching on this.
> 
> The build works fine. Does what is intended.
> 
> But now, when you open a project in intelliJ13 that uses the
> android-maven-plugin, IntelliJ declares a problem with the POM that
> references our MavenLifecycleParticipant.
> 
> What I'd like help with is:
> 1) Is this a problem with the plugin itself. Ie have we defined something
> incorrectly.
> 2) Is it just a problem with how IntelliJ is parsing a POM that declares
> the plugin.
> 
> If it is (1), what do we need to do to fix it?
> 
> However, I suspect it is (2) because similar error messages seem to occur
> when plugins designed for Maven 3.1 (and the switch to Eclipse Aether from
> Sonatype Aether) are used in a Maven-3.0 environment. I'm thinking that
> maybe IntelliJ is using a Maven-3.0 core. But I'm really not sure and would
> love some clarity from those who understand what is going on a bit better.
> And if it is (2) is there anything we or IntelliJ can do to fix it?
> 
> The plugin itself can be found at:
> https://github.com/jayway/maven-android-plugin
> 
> A project showing the failure can be found at:
> https://github.com/jayway/maven-android-plugin-samples/tree/master/morseflash/morseflash-app
> 
> And the error message is (visible via flyover in the POM editor window or
> in idea.log):

I can recreate the same exception on the command-line using the plugin with 
Maven 3.0.5 (after I removed the 3.1.1 pre-req from the plugin’s pom.xml)

The issue is that the plugin expects Maven core to supply an implementation of 
org.eclipse.aether.impl.VersionResolver, namely DefaultVersionResolver from 
maven-aether-provider.

However in Maven 3.0.x the maven-aether-provider module only supplies an 
implementation of org.sonatype.aether.impl.VersionResolver … which is why you 
see that exception :/

Unfortunately adding a direct plugin dependency to the maven-aether-provider 
from 3.1.1 won’t help because Maven will filter out this dependency as being 
supplied from Maven core

If you want the plugin to work on both Maven 3.0.x and 3.1.x then you’ll either 
need to use an API common to both (like the shared maven-dependency-tree 
component) or write two versions of the code that talks to Aether and select 
the appropriate one at runtime using reflection. But if you just want to avoid 
the exception when Intellij processes the pom.xml then you could conceivably 
provide dummy/stubbed @Component implementations of the Eclipse/Aether 
resolver, with the role set to a non-default value such as “dummy” so that it 
doesn’t interfere with the default implementation provided in Maven 3.1.1

> java.lang.RuntimeException: com.google.inject.ProvisionException:
> Guice provision errors:
> 
> 1) No implementation for org.eclipse.aether.impl.VersionResolver was bound.
>  while locating org.eclipse.aether.internal.impl.DefaultRepositorySystem
>  at 
> ClassRealm[extension>com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.9.0-rc.1,
> parent: sun.misc.Launcher$AppClassLoader@39172e08]
>  at 
> ClassRealm[extension>com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.9.0-rc.1,
> parent: sun.misc.Launcher$AppClassLoader@39172e08]
>  while locating org.eclipse.aether.RepositorySystem
>  while locating
> com.jayway.maven.plugins.android.phase_prebuild.AarMavenLifecycleParticipant
>  at 
> ClassRealm[extension>com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.9.0-rc.1,
> parent: sun.misc.Launcher$AppClassLoader@39172e08]
>  at 
> ClassRealm[extension>com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.9.0-rc.1,
> parent: sun.misc.Launcher$AppClassLoader@39172e08]
>  while locating org.apache.maven.AbstractMavenLifecycleParticipant
> annotated with @com.google.inject.name.Named(value=AarMavenLifecycleListener)
> 
> 
> We are tracking this at:
> https://code.google.com/p/maven-android-plugin/issues/detail?id=449
> 
> 
> Any help appreciated.
> 
> 
> William


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

Reply via email to