Thanks for the exceptionally clear explanation Stuart.

I don't think we can just avoid the exception with stubbed implementations
of the Resolver because the the plugin doesn't use the Resolver directly.
It asks for an Aether RepositorySystem:
    @Requirement
    private RepositorySystem repoSystem;

which is what instantiates the VersionResolver.


I'll have another look at maven-dependency-tree but I didn't see a clear
path towards what we wanted.


Could you shed some more light on:
> 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

What's doing the filtering and why?
What would be need to make it not filter out a maven-core library that is a
different version of the running Maven instance?


William


On Fri, Feb 28, 2014 at 12:13 PM, Stuart McCulloch <mccu...@gmail.com>wrote:

> 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