Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aether-users] Versioning fun with Aether milestones

Benjamin Bentmann wrote:
> Andreas Sewe wrote:
> 
>> In the above, org.eclipse.m2e.maven.runtime is the sole provider of
>> com.google.inject 1.4, which org.eclipse.aether.maven *optionally*
>> imports. But wiring org.eclipse.aether.maven to
>> org.eclipse.m2e.maven.runtime places a uses constraint upon all
>> importers of org.eclipse.aether.maven's packages: they need to get their
>> other Aether packages from org.eclipse.m2e.maven.runtime.
> 
> After some initial research yesterday, I'm having trouble making sense
> out of this analysis. AFAIK, OSGi is proud of its package-level
> granularity when it comes to wiring dependencies. If that's right, how
> does wiring the package org.apache.maven.repository.internal to
> org.eclipse.m2e.maven.runtime *for com.google.inject* impose a uses
> constraint *for org.eclipse.aether* packages?
> 
> Export-Package: org.apache.maven.repository.internal;
>  uses:="com.google.inject,..."
> 
> AFAIU, the uses directive here forces that importers of
> org.apache.maven.repository.internal that also import com.google.inject
> get wired to the same exporter of com.google.inject as
> org.eclipse.aether.maven.

Yes, I would say so too. But read on (and skip the OSGi console outputs
on the first read):

> osgi> b org.eclipse.aether.maven
> org.eclipse.aether.maven_3.1.0.v20130803-2031 [49]
>   Id=49, Status=RESOLVED    Data Root=/Users/sewe/Desktop/luna-m6/workspaces/org.eclipse.recommenders/.metadata/.plugins/org.eclipse.pde.core/ide.product/org.eclipse.osgi/bundles/49/data
>   "No registered services."
>   No services in use.
>   Exported packages
>     org.apache.maven.repository.internal; version="3.1.0.v20130803-2031"[exported]
>     META-INF.plexus; version="3.1.0.v20130803-2031"[exported]
>   Imported packages
>     org.eclipse.aether; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.artifact; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.collection; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.deployment; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.graph; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.impl; version="0.9.0.v20140226"<org.eclipse.aether.impl_0.9.0.v20140226 [48]>
>     org.eclipse.aether.installation; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.metadata; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.repository; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.resolution; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.spi.locator; version="0.9.0.v20140226"<org.eclipse.aether.spi_0.9.0.v20140226 [50]>
>     org.eclipse.aether.spi.log; version="0.9.0.v20140226"<org.eclipse.aether.spi_0.9.0.v20140226 [50]>
>     org.eclipse.aether.transfer; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.util; version="0.9.0.v20140226"<org.eclipse.aether.util_0.9.0.v20140226 [53]>
>     org.eclipse.aether.util.artifact; version="0.9.0.v20140226"<org.eclipse.aether.util_0.9.0.v20140226 [53]>
>     org.eclipse.aether.util.graph.manager; version="0.9.0.v20140226"<org.eclipse.aether.util_0.9.0.v20140226 [53]>
>     org.eclipse.aether.util.graph.selector; version="0.9.0.v20140226"<org.eclipse.aether.util_0.9.0.v20140226 [53]>
>     org.eclipse.aether.util.graph.transformer; version="0.9.0.v20140226"<org.eclipse.aether.util_0.9.0.v20140226 [53]>
>     org.eclipse.aether.util.graph.traverser; version="0.9.0.v20140226"<org.eclipse.aether.util_0.9.0.v20140226 [53]>
>     org.eclipse.aether.util.repository; version="0.9.0.v20140226"<org.eclipse.aether.util_0.9.0.v20140226 [53]>
>     org.eclipse.aether.util.version; version="0.9.0.v20140226"<org.eclipse.aether.util_0.9.0.v20140226 [53]>
>     org.eclipse.aether.version; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.codehaus.plexus.component.annotations; version="0.0.0"<org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [339]>
>     javax.inject; version="1.0.0"<javax.inject_1.0.0.v20091030 [16]>
>     com.google.inject.name; version="1.4.0"<org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [339]>
>     com.google.inject.binder; version="1.4.0"<org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [339]>
>     com.google.inject; version="1.4.0"<org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [339]>
>   No fragment bundles
>   Named class space
>     org.eclipse.aether.maven; bundle-version="3.1.0.v20130803-2031"[provided]
>   No required bundles

All org.eclipse.aether.* packages get wired to their respective
org.eclipse.aether.* bundles, but the package com.google.inject (version
>= 1.4) gets wired to org.eclipse.m2e.maven.runtime. This is possible as
org.eclipse.m2e.maven.runtime doesn't declare that some of its eported
packages *use* com.google.inject:

> osgi> h org.eclipse.m2e.maven.runtime
> Bundle headers:
>  Bnd-LastModified = 1395250921398
>  Build-Jdk = 1.6.0_30
>  Built-By = tesla
>  Bundle-ClassPath = .,jars/tesla-concurrent-localrepo-0.0.4.jar,jars/tesla-filelock-0.0.2.jar,jars/maven-core-3.2.1.jar,jars/maven-model-3.2.1.jar,jars/maven-settings-3.2.1.jar,jars/maven-settings-builder-3.2.1.jar,jars/maven-repository-metadata-3.2.1.jar,jars/maven-artifact-3.2.1.jar,jars/maven-plugin-api-3.2.1.jar,jars/maven-model-builder-3.2.1.jar,jars/maven-aether-provider-3.2.1.jar,jars/aether-api-0.9.0.M2.jar,jars/aether-util-0.9.0.M2.jar,jars/plexus-interpolation-1.19.jar,jars/plexus-utils-3.0.17.jar,jars/plexus-classworlds-2.5.1.jar,jars/plexus-component-annotations-1.5.5.jar,jars/plexus-sec-dispatcher-1.3.jar,jars/maven-embedder-3.2.1.jar,jars/plexus-cipher-1.7.jar,jars/commons-cli-1.2.jar,jars/maven-compat-3.2.1.jar,jars/wagon-provider-api-2.6.jar,jars/org.eclipse.sisu.plexus-0.0.0.M5.jar,jars/cdi-api-1.0.jar,jars/jsr250-api-1.0.jar,jars/org.eclipse.sisu.inject-0.0.0.M5.jar,jars/sisu-guice-3.1.3-no_aop.jar,jars/javax.inject-1.jar,jars/guava-14.0.1.jar,jars/plexus-build-api
-0.0.7.jar,jars/aether-impl-0.9.0.M2.jar,jars/aether-spi-0.9.0.M2.jar,jars/aether-connector-okhttp-0.0.11.jar,jars/okhttp-1.3.0.jar,jars/okhttp-protocols-1.3.0.jar,jars/aether-connector-wagon-0.9.0.M2.jar,jars/wagon-file-2.6.jar,jars/commons-lang-2.6.jar
>  Bundle-DocURL = www.eclipse.org
>  Bundle-ManifestVersion = 2
>  Bundle-Name = Embedded Maven Runtime Bundle (includes Incubating components)
>  Bundle-RequiredExecutionEnvironment = JavaSE-1.6,JavaSE-1.7
>  Bundle-SymbolicName = org.eclipse.m2e.maven.runtime;singleton:=false
>  Bundle-Vendor = Eclipse.org - m2e
>  Bundle-Version = 1.5.0.20140319-1741
>  Created-By = Apache Maven Bundle Plugin
>  Eclipse-BundleShape = dir
>  Embed-Dependency = *;scope=compile|runtime;artifactId=!aopalliance|apache-maven|slf4j-api
>  Embed-Directory = jars
>  Embed-Transitive = true
>  Embedded-Artifacts = jars/tesla-concurrent-localrepo-0.0.4.jar;g="io.tesla.aether";a="tesla-concurrent-localrepo";v="0.0.4",jars/tesla-filelock-0.0.2.jar;g="io.tesla";a="tesla-filelock";v="0.0.2",jars/maven-core-3.2.1.jar;g="org.apache.maven";a="maven-core";v="3.2.1",jars/maven-model-3.2.1.jar;g="org.apache.maven";a="maven-model";v="3.2.1",jars/maven-settings-3.2.1.jar;g="org.apache.maven";a="maven-settings";v="3.2.1",jars/maven-settings-builder-3.2.1.jar;g="org.apache.maven";a="maven-settings-builder";v="3.2.1",jars/maven-repository-metadata-3.2.1.jar;g="org.apache.maven";a="maven-repository-metadata";v="3.2.1",jars/maven-artifact-3.2.1.jar;g="org.apache.maven";a="maven-artifact";v="3.2.1",jars/maven-plugin-api-3.2.1.jar;g="org.apache.maven";a="maven-plugin-api";v="3.2.1",jars/maven-model-builder-3.2.1.jar;g="org.apache.maven";a="maven-model-builder";v="3.2.1",jars/maven-aether-provider-3.2.1.jar;g="org.apache.maven";a="maven-aether-provider";v="3.2.1",jars/aether-api-0.9.0.M2.jar
;g="org.eclipse.aether";a="aether-api";v="0.9.0.M2",jars/aether-util-0.9.0.M2.jar;g="org.eclipse.aether";a="aether-util";v="0.9.0.M2",jars/plexus-interpolation-1.19.jar;g="org.codehaus.plexus";a="plexus-interpolation";v="1.19",jars/plexus-utils-3.0.17.jar;g="org.codehaus.plexus";a="plexus-utils";v="3.0.17",jars/plexus-classworlds-2.5.1.jar;g="org.codehaus.plexus";a="plexus-classworlds";v="2.5.1",jars/plexus-component-annotations-1.5.5.jar;g="org.codehaus.plexus";a="plexus-component-annotations";v="1.5.5",jars/plexus-sec-dispatcher-1.3.jar;g="org.sonatype.plexus";a="plexus-sec-dispatcher";v="1.3",jars/maven-embedder-3.2.1.jar;g="org.apache.maven";a="maven-embedder";v="3.2.1",jars/plexus-cipher-1.7.jar;g="org.sonatype.plexus";a="plexus-cipher";v="1.7",jars/commons-cli-1.2.jar;g="commons-cli";a="commons-cli";v="1.2",jars/maven-compat-3.2.1.jar;g="org.apache.maven";a="maven-compat";v="3.2.1",jars/wagon-provider-api-2.6.jar;g="org.apache.maven.wagon";a="wagon-provider-api";v="2.6",jars/org
.eclipse.sisu.plexus-0.0.0.M5.jar;g="org.eclipse.sisu";a="org.eclipse.sisu.plexus";v="0.0.0.M5",jars/cdi-api-1.0.jar;g="javax.enterprise";a="cdi-api";v="1.0",jars/jsr250-api-1.0.jar;g="javax.annotation";a="jsr250-api";v="1.0",jars/org.eclipse.sisu.inject-0.0.0.M5.jar;g="org.eclipse.sisu";a="org.eclipse.sisu.inject";v="0.0.0.M5",jars/sisu-guice-3.1.3-no_aop.jar;g="org.sonatype.sisu";a="sisu-guice";v="3.1.3";c="no_aop",jars/javax.inject-1.jar;g="javax.inject";a="javax.inject";v="1",jars/guava-14.0.1.jar;g="com.google.guava";a="guava";v="14.0.1",jars/plexus-build-api-0.0.7.jar;g="org.sonatype.plexus";a="plexus-build-api";v="0.0.7",jars/aether-impl-0.9.0.M2.jar;g="org.eclipse.aether";a="aether-impl";v="0.9.0.M2",jars/aether-spi-0.9.0.M2.jar;g="org.eclipse.aether";a="aether-spi";v="0.9.0.M2",jars/aether-connector-okhttp-0.0.11.jar;g="io.tesla.aether";a="aether-connector-okhttp";v="0.0.11",jars/okhttp-1.3.0.jar;g="com.squareup.okhttp";a="okhttp";v="1.3.0",jars/okhttp-protocols-1.3.0.jar;g="
com.squareup.okhttp";a="okhttp-protocols";v="1.3.0",jars/aether-connector-wagon-0.9.0.M2.jar;g="org.eclipse.aether";a="aether-connector-wagon";v="0.9.0.M2",jars/wagon-file-2.6.jar;g="org.apache.maven.wagon";a="wagon-file";v="2.6",jars/commons-lang-2.6.jar;g="commons-lang";a="commons-lang";v="2.6"
>  Export-Package = org.apache.maven,org.apache.maven.artifact,org.apache.maven.artifact.deployer,org.apache.maven.artifact.factory,org.apache.maven.artifact.handler,org.apache.maven.artifact.handler.manager,org.apache.maven.artifact.installer,org.apache.maven.artifact.manager,org.apache.maven.artifact.metadata,org.apache.maven.artifact.repository,org.apache.maven.artifact.repository.layout,org.apache.maven.artifact.repository.metadata,org.apache.maven.artifact.repository.metadata.io,org.apache.maven.artifact.repository.metadata.io.xpp3,org.apache.maven.artifact.resolver,org.apache.maven.artifact.resolver.filter,org.apache.maven.artifact.versioning,org.apache.maven.classrealm,org.apache.maven.cli,org.apache.maven.cli.event,org.apache.maven.cli.logging,org.apache.maven.cli.logging.impl,org.apache.maven.cli.transfer,org.apache.maven.configuration,org.apache.maven.configuration.internal,org.apache.maven.eventspy,org.apache.maven.eventspy.internal,org.apache.maven.exception,org.apache.mav
en.execution,org.apache.maven.execution.scope,org.apache.maven.execution.scope.internal,org.apache.maven.lifecycle,org.apache.maven.lifecycle.internal,org.apache.maven.lifecycle.internal.builder,org.apache.maven.lifecycle.internal.builder.multithreaded,org.apache.maven.lifecycle.internal.builder.singlethreaded,org.apache.maven.lifecycle.mapping,org.apache.maven.messages,org.apache.maven.model,org.apache.maven.model.building,org.apache.maven.model.composition,org.apache.maven.model.inheritance,org.apache.maven.model.interpolation,org.apache.maven.model.io,org.apache.maven.model.io.xpp3,org.apache.maven.model.locator,org.apache.maven.model.management,org.apache.maven.model.merge,org.apache.maven.model.normalization,org.apache.maven.model.path,org.apache.maven.model.plugin,org.apache.maven.model.profile,org.apache.maven.model.profile.activation,org.apache.maven.model.resolution,org.apache.maven.model.superpom,org.apache.maven.model.validation,org.apache.maven.monitor.event,org.apache.mav
en.monitor.logging,org.apache.maven.plugin,org.apache.maven.plugin.descriptor,org.apache.maven.plugin.internal,org.apache.maven.plugin.lifecycle,org.apache.maven.plugin.lifecycle.io.xpp3,org.apache.maven.plugin.logging,org.apache.maven.plugin.prefix,org.apache.maven.plugin.prefix.internal,org.apache.maven.plugin.version,org.apache.maven.plugin.version.internal,org.apache.maven.profiles,org.apache.maven.profiles.activation,org.apache.maven.profiles.io.xpp3,org.apache.maven.project,org.apache.maven.project.artifact,org.apache.maven.project.inheritance,org.apache.maven.project.interpolation,org.apache.maven.project.path,org.apache.maven.project.validation,org.apache.maven.properties.internal,org.apache.maven.reporting,org.apache.maven.repository,org.apache.maven.repository.internal,org.apache.maven.repository.legacy,org.apache.maven.repository.legacy.metadata,org.apache.maven.repository.legacy.repository,org.apache.maven.repository.legacy.resolver,org.apache.maven.repository.legacy.resol
ver.conflict,org.apache.maven.repository.legacy.resolver.transform,org.apache.maven.repository.metadata,org.apache.maven.rtinfo,org.apache.maven.rtinfo.internal,org.apache.maven.settings,org.apache.maven.settings.building,org.apache.maven.settings.crypto,org.apache.maven.settings.io,org.apache.maven.settings.io.xpp3,org.apache.maven.settings.merge,org.apache.maven.settings.validation,org.apache.maven.toolchain,org.apache.maven.toolchain.java,org.apache.maven.toolchain.model,org.apache.maven.toolchain.model.io.xpp3,org.apache.maven.usability.plugin,org.apache.maven.usability.plugin.io.xpp3,org.apache.maven.wagon,org.apache.maven.wagon.authentication,org.apache.maven.wagon.authorization,org.apache.maven.wagon.events,org.apache.maven.wagon.observers,org.apache.maven.wagon.providers.file,org.apache.maven.wagon.proxy,org.apache.maven.wagon.repository,org.apache.maven.wagon.resource,org.codehaus.plexus,org.codehaus.plexus.classworlds,org.codehaus.plexus.classworlds.launcher,org.codehaus.ple
xus.classworlds.realm,org.codehaus.plexus.classworlds.strategy,org.codehaus.plexus.component,org.codehaus.plexus.component.annotations,org.codehaus.plexus.component.composition,org.codehaus.plexus.component.configurator,org.codehaus.plexus.component.configurator.converters,org.codehaus.plexus.component.configurator.converters.basic,org.codehaus.plexus.component.configurator.converters.composite,org.codehaus.plexus.component.configurator.converters.lookup,org.codehaus.plexus.component.configurator.converters.special,org.codehaus.plexus.component.configurator.expression,org.codehaus.plexus.component.factory,org.codehaus.plexus.component.repository,org.codehaus.plexus.component.repository.exception,org.codehaus.plexus.configuration,org.codehaus.plexus.configuration.xml,org.codehaus.plexus.context,org.codehaus.plexus.interpolation,org.codehaus.plexus.interpolation.multi,org.codehaus.plexus.interpolation.object,org.codehaus.plexus.interpolation.os,org.codehaus.plexus.interpolation.reflecti
on,org.codehaus.plexus.interpolation.util,org.codehaus.plexus.logging,org.codehaus.plexus.logging.console,org.codehaus.plexus.personality.plexus.lifecycle.phase,org.codehaus.plexus.util,org.codehaus.plexus.util.cli,org.codehaus.plexus.util.cli.shell,org.codehaus.plexus.util.dag,org.codehaus.plexus.util.introspection,org.codehaus.plexus.util.io,org.codehaus.plexus.util.reflection,org.codehaus.plexus.util.xml,org.codehaus.plexus.util.xml.pull,org.sonatype.plexus.build.incremental,org.sonatype.plexus.components.cipher,org.sonatype.plexus.components.sec.dispatcher,org.sonatype.plexus.components.sec.dispatcher.model,org.sonatype.plexus.components.sec.dispatcher.model.io.xpp3,org.eclipse.aether;version="0.9.0.M2",org.eclipse.aether.artifact;version="0.9.0.M2",org.eclipse.aether.collection;version="0.9.0.M2",org.eclipse.aether.connector.wagon;version="0.9.0.M2",org.eclipse.aether.deployment;version="0.9.0.M2",org.eclipse.aether.graph;version="0.9.0.M2",org.eclipse.aether.impl;version="0.9.0.
M2",org.eclipse.aether.installation;version="0.9.0.M2",org.eclipse.aether.internal.connector.wagon,org.eclipse.aether.internal.impl,org.eclipse.aether.metadata;version="0.9.0.M2",org.eclipse.aether.repository;version="0.9.0.M2",org.eclipse.aether.resolution;version="0.9.0.M2",org.eclipse.aether.spi.connector;version="0.9.0.M2",org.eclipse.aether.spi.io;version="0.9.0.M2",org.eclipse.aether.spi.localrepo;version="0.9.0.M2",org.eclipse.aether.spi.locator;version="0.9.0.M2",org.eclipse.aether.spi.log;version="0.9.0.M2",org.eclipse.aether.transfer;version="0.9.0.M2",org.eclipse.aether.util;version="0.9.0.M2",org.eclipse.aether.util.artifact;version="0.9.0.M2",org.eclipse.aether.util.concurrency;version="0.9.0.M2",org.eclipse.aether.util.filter;version="0.9.0.M2",org.eclipse.aether.util.graph.manager;version="0.9.0.M2",org.eclipse.aether.util.graph.selector;version="0.9.0.M2",org.eclipse.aether.util.graph.transformer;version="0.9.0.M2",org.eclipse.aether.util.graph.traverser;version="0.9.0
.M2",org.eclipse.aether.util.graph.visitor;version="0.9.0.M2",org.eclipse.aether.util.listener;version="0.9.0.M2",org.eclipse.aether.util.repository;version="0.9.0.M2",org.eclipse.aether.util.repository.layout;version="0.9.0.M2",org.eclipse.aether.util.version;version="0.9.0.M2",org.eclipse.aether.version;version="0.9.0.M2",com.google.inject;version="1.4",com.google.inject.binder;version="1.4",com.google.inject.internal,com.google.inject.internal.util,com.google.inject.matcher;version="1.4",com.google.inject.name;version="1.4",com.google.inject.spi;version="1.4",com.google.inject.util;version="1.4",javax.inject,com.squareup.okhttp,com.squareup.okhttp.internal,com.squareup.okhttp.internal.http,com.squareup.okhttp.internal.spdy,com.squareup.okhttp.internal.tls,io.tesla.aether.client,io.tesla.aether.concurrency,io.tesla.aether.connector,io.tesla.aether.okhttp,io.tesla.aether.okhttp.ssl,io.tesla.aether.wagon,io.tesla.filelock,io.tesla.filelock.internal,META-INF.plexus,META-INF.sisu
>  Manifest-Version = 1.0
>  Require-Bundle = org.slf4j.api;bundle-version="1.6.2",org.eclipse.m2e.maven.runtime.slf4j.simple;bundle-version="[1.5.0,1.6.0)"
>  Tool = Bnd-2.1.0.20130426-122213

In contrast, the org.eclipse.aether.maven bundle *does* correctly
declare such uses constraints. :-)

> osgi> h org.eclipse.aether.maven
> Bundle headers:
>  Bnd-LastModified = 1375561905495
>  Build-Jdk = 1.5.0_22
>  Built-By = Benjamin
>  Bundle-ClassPath = .,jars/maven-aether-provider-3.1.0.jar,jars/maven-model-3.1.0.jar,jars/maven-model-builder-3.1.0.jar,jars/plexus-interpolation-1.16.jar,jars/maven-repository-metadata-3.1.0.jar,jars/plexus-utils-2.1.jar
>  Bundle-Description = An OSGi bundle wrapping the Apache Maven Aether Provider.
>  Bundle-DocURL = http://www.eclipse.org/aether/
>  Bundle-License = http://www.eclipse.org/legal/epl-v10.html
>  Bundle-ManifestVersion = 2
>  Bundle-Name = Maven Aether Provider Bundle (Incubation)
>  Bundle-SymbolicName = org.eclipse.aether.maven
>  Bundle-Vendor = The Eclipse Foundation
>  Bundle-Version = 3.1.0.v20130803-2031
>  Created-By = Apache Maven Bundle Plugin
>  Export-Package = org.apache.maven.repository.internal;uses:="com.google.inject,javax.inject,org.codehaus.plexus.component.annotations,org.eclipse.aether,org.eclipse.aether.artifact,org.eclipse.aether.deployment,org.eclipse.aether.impl,org.eclipse.aether.installation,org.eclipse.aether.repository,org.eclipse.aether.resolution,org.eclipse.aether.spi.locator,org.eclipse.aether.spi.log";version="3.1.0.v20130803-2031",META-INF.plexus;version="3.1.0.v20130803-2031"
>  Import-Package = com.google.inject;version="[1.4,2)";resolution:=optional,com.google.inject.binder;version="[1.4,2)";resolution:=optional,com.google.inject.name;version="[1.4,2)";resolution:=optional,javax.inject;resolution:=optional,org.codehaus.plexus.component.annotations;resolution:=optional,org.eclipse.aether;version="[0.9,1)",org.eclipse.aether.artifact;version="[0.9,1)",org.eclipse.aether.collection;version="[0.9,1)",org.eclipse.aether.deployment;version="[0.9,1)",org.eclipse.aether.graph;version="[0.9,1)",org.eclipse.aether.impl,org.eclipse.aether.installation;version="[0.9,1)",org.eclipse.aether.metadata;version="[0.9,1)",org.eclipse.aether.repository;version="[0.9,1)",org.eclipse.aether.resolution;version="[0.9,1)",org.eclipse.aether.spi.locator;version="[0.9,1)",org.eclipse.aether.spi.log;version="[0.9,1)",org.eclipse.aether.transfer;version="[0.9,1)",org.eclipse.aether.util;version="[0.9,1)",org.eclipse.aether.util.artifact;version="[0.9,1)",org.eclipse.aether.util.grap
h.manager;version="[0.9,1)",org.eclipse.aether.util.graph.selector;version="[0.9,1)",org.eclipse.aether.util.graph.transformer;version="[0.9,1)",org.eclipse.aether.util.graph.traverser;version="[0.9,1)",org.eclipse.aether.util.repository;version="[0.9,1)",org.eclipse.aether.util.version;version="[0.9,1)",org.eclipse.aether.version;version="[0.9,1)"
>  Manifest-Version = 1.0
>  Tool = Bnd-2.1.0.20130426-122213

Consequently, whoever imports the package
org.apache.maven.repository.internal (the only exported package of
org.eclipse.aether.maven) will have to obtain com.google.inject from
org.eclipse.m2e.maven.runtime *if* it itself imports com.google.inject.
Luckily, our org.eclipse.recommenders.models bundle does not:

> osgi> b org.eclipse.recommenders.models
> org.eclipse.recommenders.models_2.1.0.qualifier [279]
>   Id=279, Status=STARTING    Data Root=/Users/sewe/Desktop/luna-m6/workspaces/org.eclipse.recommenders/.metadata/.plugins/org.eclipse.pde.core/ide.product/org.eclipse.osgi/bundles/279/data
>   "No registered services."
>   No services in use.
>   Exported packages
>     org.eclipse.recommenders.models; version="0.0.0"[exported]
>     org.eclipse.recommenders.models.advisors; version="0.0.0"[exported]
>   Imported packages
>     com.google.common.annotations; version="15.0.0"<com.google.guava_15.0.0.v201402241730 [6]>
>     com.google.common.base; version="15.0.0"<com.google.guava_15.0.0.v201402241730 [6]>
>     com.google.common.cache; version="15.0.0"<com.google.guava_15.0.0.v201402241730 [6]>
>     com.google.common.collect; version="15.0.0"<com.google.guava_15.0.0.v201402241730 [6]>
>     com.google.common.eventbus; version="15.0.0"<com.google.guava_15.0.0.v201402241730 [6]>
>     com.google.common.io; version="15.0.0"<com.google.guava_15.0.0.v201402241730 [6]>
>     com.google.common.util.concurrent; version="15.0.0"<com.google.guava_15.0.0.v201402241730 [6]>
>     org.apache.commons.httpclient; version="3.1.0"<org.apache.commons.httpclient_3.1.0.v201012070820 [25]>
>     org.apache.commons.httpclient.auth; version="3.1.0"<org.apache.commons.httpclient_3.1.0.v201012070820 [25]>
>     org.apache.commons.httpclient.params; version="3.1.0"<org.apache.commons.httpclient_3.1.0.v201012070820 [25]>
>     org.apache.commons.io; version="2.0.1"<org.apache.commons.io_2.0.1.v201105210651 [26]>
>     org.apache.commons.lang3; version="3.1.0"<org.apache.commons.lang3_3.1.0.v201402241730 [28]>
>     org.apache.commons.lang3.builder; version="3.1.0"<org.apache.commons.lang3_3.1.0.v201402241730 [28]>
>     org.apache.commons.pool; version="1.6.0"<org.apache.commons.pool_1.6.0.v201204271246 [31]>
>     org.apache.commons.pool.impl; version="1.6.0"<org.apache.commons.pool_1.6.0.v201204271246 [31]>
>     org.apache.maven.repository.internal; version="3.1.0.v20130803-2031"<org.eclipse.aether.maven_3.1.0.v20130803-2031 [49]>
>     org.apache.solr.client.solrj; version="3.5.0"<org.apache.solr.client.solrj_3.5.0.v20120530-0900 [40]>
>     org.apache.solr.client.solrj.impl; version="3.5.0"<org.apache.solr.client.solrj_3.5.0.v20120530-0900 [40]>
>     org.apache.solr.client.solrj.response; version="3.5.0"<org.apache.solr.client.solrj_3.5.0.v20120530-0900 [40]>
>     org.apache.solr.common; version="3.5.0"<org.apache.solr.client.solrj_3.5.0.v20120530-0900 [40]>
>     org.apache.solr.common.params; version="3.5.0"<org.apache.solr.client.solrj_3.5.0.v20120530-0900 [40]>
>     org.eclipse.aether; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.artifact; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.connector.basic; version="0.9.0.v20140226"<org.eclipse.aether.connector.basic_0.9.0.v20140226 [47]>
>     org.eclipse.aether.impl; version="0.9.0.v20140226"<org.eclipse.aether.impl_0.9.0.v20140226 [48]>
>     org.eclipse.aether.repository; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.resolution; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.spi.connector; version="0.9.0.v20140226"<org.eclipse.aether.spi_0.9.0.v20140226 [50]>
>     org.eclipse.aether.spi.connector.transport; version="0.9.0.v20140226"<org.eclipse.aether.spi_0.9.0.v20140226 [50]>
>     org.eclipse.aether.transfer; version="0.9.0.v20140226"<org.eclipse.aether.api_0.9.0.v20140226 [46]>
>     org.eclipse.aether.transport.file; version="0.9.0.v20140226"<org.eclipse.aether.transport.file_0.9.0.v20140226 [51]>
>     org.eclipse.aether.transport.http; version="0.9.0.v20140226"<org.eclipse.aether.transport.http_0.9.0.v20140226 [52]>
>     org.eclipse.aether.util.repository; version="0.9.0.v20140226"<org.eclipse.aether.util_0.9.0.v20140226 [53]>
>     org.slf4j; version="1.7.2"<org.slf4j.api_1.7.2.v20121108-1250 [324]>
>     org.eclipse.recommenders.utils; version="0.0.0"<org.eclipse.recommenders.utils_2.1.0.qualifier [286]>
>     org.eclipse.recommenders.utils.gson; version="0.0.0"<org.eclipse.recommenders.utils_2.1.0.qualifier [286]>
>     org.eclipse.recommenders.utils.names; version="0.0.0"<org.eclipse.recommenders.utils_2.1.0.qualifier [286]>
>     org.apache.lucene; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.analysis; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.analysis.standard; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.analysis.standard.std31; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.analysis.tokenattributes; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.collation; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.document; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.index; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.messages; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.queryParser; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.search; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.search.function; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.search.payloads; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.search.spans; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.store; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.util; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.util.fst; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.apache.lucene.util.packed; version="3.5.0"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>   No fragment bundles
>   Named class space
>     org.eclipse.recommenders.models; bundle-version="2.1.0.qualifier"[provided]
>   Required bundles
>     org.apache.lucene.core; bundle-version="3.5.0.v20120725-1805"<org.apache.lucene.core_3.5.0.v20120725-1805 [39]>
>     org.eclipse.recommenders.utils; bundle-version="2.1.0.qualifier"<org.eclipse.recommenders.utils_2.1.0.qualifier [286]>

In other words, it resolves just fine.

> I fail to see how this affects the wiring of org.eclipse.aether
> packages. Wiring the org.eclipse.aether.* imports in
> org.eclipse.aether.maven to org.eclipse.aether bundles seems like a
> valid configuration to me from the manifests and OSGi rules, no?

I would say so (and have tried to illustrate this with output from the
OSGi console above).

However, on another install (first install m2e, then Code Recommenders
with Aether into a fresh Eclipse) I see uses conflicts again:

> org.eclipse.recommenders.models [324]
>   Unresolved requirement: Require-Bundle: org.eclipse.recommenders.utils; bundle-version="2.0.0"
>     -> Bundle-SymbolicName: org.eclipse.recommenders.utils; bundle-version="2.1.0.v20140320-1757"
>        org.eclipse.recommenders.utils [330]
>          Bundle was not resolved because of a uses contraint violation.
>   org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve resource org.eclipse.recommenders.utils [osgi.identity; osgi.identity="org.eclipse.recommenders.utils"; type="osgi.bundle"; version:Version="2.1.0.v20140320-1757"] because it is exposed to package 'org.eclipse.aether.artifact' from resources org.eclipse.aether.api [osgi.identity; osgi.identity="org.eclipse.aether.api"; type="osgi.bundle"; version:Version="0.9.0.v20140226"] and org.eclipse.m2e.maven.runtime [osgi.identity; osgi.identity="org.eclipse.m2e.maven.runtime"; type="osgi.bundle"; version:Version="1.5.0.20140319-1741"; singleton:="false"] via two dependency chains.
> 
> Chain 1:
>   org.eclipse.recommenders.utils [osgi.identity; osgi.identity="org.eclipse.recommenders.utils"; type="osgi.bundle"; version:Version="2.1.0.v20140320-1757"]
>     import: (&(osgi.wiring.package=org.eclipse.aether.artifact)(&(version>=0.9.0.v20140226)(!(version>=1.0.0))))
>      |
>     export: osgi.wiring.package: org.eclipse.aether.artifact
>   org.eclipse.aether.api [osgi.identity; osgi.identity="org.eclipse.aether.api"; type="osgi.bundle"; version:Version="0.9.0.v20140226"]
> 
> Chain 2:
>   org.eclipse.recommenders.utils [osgi.identity; osgi.identity="org.eclipse.recommenders.utils"; type="osgi.bundle"; version:Version="2.1.0.v20140320-1757"]
>     import: (&(osgi.wiring.package=org.eclipse.aether.util.artifact)(&(version>=0.9.0.v20140226)(!(version>=1.0.0))))
>      |
>     export: osgi.wiring.package=org.eclipse.aether.util.artifact; uses:=org.eclipse.aether.artifact
>   org.eclipse.aether.util [osgi.identity; osgi.identity="org.eclipse.aether.util"; type="osgi.bundle"; version:Version="0.9.0.v20140226"]
>     import: (&(osgi.wiring.package=org.eclipse.aether.artifact)(&(version>=0.9.0)(!(version>=1.0.0))))
>      |
>     export: osgi.wiring.package: org.eclipse.aether.artifact
>   org.eclipse.m2e.maven.runtime [osgi.identity; osgi.identity="org.eclipse.m2e.maven.runtime"; type="osgi.bundle"; version:Version="1.5.0.20140319-1741"; singleton:="false"]  Bundle was not resolved because of a uses contraint violation.
>   org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve resource org.eclipse.recommenders.models [osgi.identity; osgi.identity="org.eclipse.recommenders.models"; type="osgi.bundle"; version:Version="2.1.0.v20140320-1757"; singleton:="true"] because it is exposed to package 'org.eclipse.aether.impl' from resources org.eclipse.aether.impl [osgi.identity; osgi.identity="org.eclipse.aether.impl"; type="osgi.bundle"; version:Version="0.9.0.v20140226"] and org.eclipse.m2e.maven.runtime [osgi.identity; osgi.identity="org.eclipse.m2e.maven.runtime"; type="osgi.bundle"; version:Version="1.5.0.20140319-1741"; singleton:="false"] via two dependency chains.
> 
> Chain 1:
>   org.eclipse.recommenders.models [osgi.identity; osgi.identity="org.eclipse.recommenders.models"; type="osgi.bundle"; version:Version="2.1.0.v20140320-1757"; singleton:="true"]
>     import: (&(osgi.wiring.package=org.eclipse.aether.impl)(&(version>=0.9.0.v20140226)(!(version>=1.0.0))))
>      |
>     export: osgi.wiring.package: org.eclipse.aether.impl
>   org.eclipse.aether.impl [osgi.identity; osgi.identity="org.eclipse.aether.impl"; type="osgi.bundle"; version:Version="0.9.0.v20140226"]
> 
> Chain 2:
>   org.eclipse.recommenders.models [osgi.identity; osgi.identity="org.eclipse.recommenders.models"; type="osgi.bundle"; version:Version="2.1.0.v20140320-1757"; singleton:="true"]
>     import: (&(osgi.wiring.package=org.apache.maven.repository.internal)(&(version>=3.1.0)(!(version>=3.2.0))))
>      |
>     export: osgi.wiring.package=org.apache.maven.repository.internal; uses:=org.eclipse.aether.impl
>   org.eclipse.aether.maven [osgi.identity; osgi.identity="org.eclipse.aether.maven"; type="osgi.bundle"; version:Version="3.1.0.v20130803-2031"]
>     import: (osgi.wiring.package=org.eclipse.aether.impl)
>      |
>     export: osgi.wiring.package: org.eclipse.aether.impl
>   org.eclipse.m2e.maven.runtime [osgi.identity; osgi.identity="org.eclipse.m2e.maven.runtime"; type="osgi.bundle"; version:Version="1.5.0.20140319-1741"; singleton:="false"]

I am frankly mystified why the OSGi runtime decides to wire
org.eclipse.aether.maven's imported packages to those from the Maven
runtime:

> osgi> diag 310
> org.eclipse.aether.maven [310]
>   No resolution report for the bundle.
> osgi> b 310
> org.eclipse.aether.maven_3.1.0.v20130803-2031 [310]
>   Id=310, Status=RESOLVED    Data Root=/Volumes/ramdisk/eclipse/configuration/org.eclipse.osgi/310/data
>   "No registered services."
>   No services in use.
>   Exported packages
>     org.apache.maven.repository.internal; version="3.1.0.v20130803-2031"[exported]
>     META-INF.plexus; version="3.1.0.v20130803-2031"[exported]
>   Imported packages
>     com.google.inject; version="1.4.0" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     com.google.inject.binder; version="1.4.0" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     com.google.inject.name; version="1.4.0" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     javax.inject; version="1.0.0" <javax.inject_1.0.0.v20091030 [9]>
>     org.codehaus.plexus.component.annotations; version="0.0.0" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.artifact; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.collection; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.deployment; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.graph; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.impl; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.installation; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.metadata; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.repository; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.resolution; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.spi.locator; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.spi.log; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.transfer; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.util; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.util.artifact; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.util.graph.manager; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.util.graph.selector; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.util.graph.transformer; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.util.graph.traverser; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.util.repository; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.util.version; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>     org.eclipse.aether.version; version="0.9.0.M2" <org.eclipse.m2e.maven.runtime_1.5.0.20140319-1741 [273]>
>   No fragment bundles
>   No required bundles

Restarting this particular Eclipse install with "eclipse -clean"
apparently causes re-resolution; thereafter, all the constraints resolve
just fine.

So either the OSGi resolver is buggy or it simply doesn't apply the
global, single-step constraint solving that you and I assume it does.
The onl way out of this, if you agree that our
org.eclipse.recommenders.models bundle doesn't do anything wrong w.r.t.
to its package imports is to specify stricter version constraints for
the imports of the org.eclipse.aether bundles; after all, there the API
did change significantly between 0.9.0.M2 and the 0.9.0 release.

Thoughts?

Best wishes,

Andreas

-- 
Codetrails UG (haftungsbeschränkt)
The knowledge transfer company

Robert-Bosch-Str. 7, 64293 Darmstadt
Mobile: +49-170-811-3791
http://www.codetrails.com/

Managing Director: Dr. Marcel Bruch
Handelsregister: Darmstadt HRB 91940


Back to the top