Avita
Avita

Reputation: 57

Version ranges defined in pom.xml while using features-maven-plugin not resolved properly

I am running into problems using the features-maven-plugin with version ranges defined in my dependencies.

It works fine if I don't use version ranges.

Is this a known issue or am I doing something wrong? It says :

    -
[INFO] -- Start generating H:\WDP\workspace\com.company.ssb.pm.ilexamplebundle\target\classes\feature.xml --
[INFO]  Generating feature org.osgi.core from org.osgi:org.osgi.core:jar:4.3.1:provided
[INFO]   adding bundle org.osgi:org.osgi.core:jar:4.3.1:provided
[INFO]  Generating feature api from com.company.ssb.nbda.cpm:api:jar:0.9.1:compile
[WARNING] Unable to retrieve metadata for com.company.ssb.cpm.common:pmcore:jar:[0.1,):compile, not including dependencies for it
Downloading: http://artifacts.ijk.company.se:8081/nexus/content/groups/public/com/company/ssb/cpm/common/pmcore/[0.1,)/pmcore-[0.1,).jar

[WARNING] Unable to determine if com.company.ssb.cpm.common:pmcore:jar:[0.1,):compile is a bundle; defaulting to false
org.apache.maven.artifact.resolver.ArtifactResolutionException: Could not transfer artifact com.company.ssb.cpm.common:pmcore:jar:[0.1,) from/to artifacts (http://artifacts.ijk.company.se:8081/nexus/content/groups/public/): Illegal character in path at index 102: http://artifacts.ijk.company.se:8081/nexus/content/groups/public/com/company/ssb/cpm/common/pmcore/[0.1,)/pmcore-[0.1,).jar
  com.company.ssb.cpm.common:pmcore:jar:null

from the specified remote repositories:
  artifacts (http://artifacts.ijk.company.se:8081/nexus/content/groups/public/, releases=true, snapshots=true)

    at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:232)
    at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:164)
    at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:555)
    at org.apache.karaf.tooling.features.GenerateFeaturesFileMojo.isBundle(GenerateFeaturesFileMojo.java:407)
    at org.apache.karaf.tooling.features.GenerateFeaturesFileMojo.writeBundle(GenerateFeaturesFileMojo.java:300)
    at org.apache.karaf.tooling.features.GenerateFeaturesFileMojo.writeBundle(GenerateFeaturesFileMojo.java:292)
    at org.apache.karaf.tooling.features.GenerateFeaturesFileMojo.writeProjectDependencyFeatures(GenerateFeaturesFileMojo.java:256)
    at org.apache.karaf.tooling.features.GenerateFeaturesFileMojo.populateProperties(GenerateFeaturesFileMojo.java:197)
    at org.apache.karaf.tooling.features.GenerateFeaturesFileMojo.execute(GenerateFeaturesFileMojo.java:172)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact com.company.ssb.cpm.common:pmcore:jar:[0.1,) from/to artifacts (http://artifacts.ijk.company.se:8081/nexus/content/groups/public/): Illegal character in path at index 102: http://artifacts.ijk.company.se:8081/nexus/content/groups/public/com/company/ssb/cpm/common/pmcore/[0.1,)/pmcore-[0.1,).jar
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:295)
    at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:222)
    ... 29 more
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact com.company.ssb.cpm.common:pmcore:jar:[0.1,) from/to artifacts (http://artifacts.ijk.company.se:8081/nexus/content/groups/public/): Illegal character in path at index 102: http://artifacts.ijk.company.se:8081/nexus/content/groups/public/com/company/ssb/cpm/common/pmcore/[0.1,)/pmcore-[0.1,).jar
    at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1016)
    at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1004)
    at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:725)
    at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.IllegalArgumentException: Illegal character in path at index 102: http://artifacts.ijk.company.se:8081/nexus/content/groups/public/com/company/ssb/cpm/common/pmcore/[0.1,)/pmcore-[0.1,).jar
    at java.net.URI.create(URI.java:859)
    at org.apache.maven.wagon.providers.http.httpclient.client.methods.HttpGet.<init>(HttpGet.java:69)
    at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:841)
    at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)
    at org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)
    at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)
    at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:660)
    ... 4 more
Caused by: java.net.URISyntaxException: Illegal character in path at index 102: http://artifacts.ijk.company.se:8081/nexus/content/groups/public/com/company/ssb/cpm/common/pmcore/[0.1,)/pmcore-[0.1,).jar
    at java.net.URI$Parser.fail(URI.java:2829)
    at java.net.URI$Parser.checkChars(URI.java:3002)
    at java.net.URI$Parser.parseHierarchical(URI.java:3086)
    at java.net.URI$Parser.parse(URI.java:3034)
    at java.net.URI.<init>(URI.java:595)
    at java.net.URI.create(URI.java:857)
    ... 10 more
[ERROR]  unable to find suitable bundle for artifact 'com.company.ssb.cpm.common:pmcore:jar:[0.1,):compile'
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE

Maven version is 3.2.2

There is a version 0.1.0 jar in the {user home}.m2\repository\com\company\ssb\pm\common\pmcore\0.1.0

My pom.xml is

    ...
    <dependency>
        <groupId>com.company.ssb.nbda.pm</groupId>
        <artifactId>api</artifactId>
        <version>0.9.1</version>
    </dependency>
    ....



    ...
<plugin>
                    <groupId>org.apache.karaf.tooling</groupId>
                    <artifactId>features-maven-plugin</artifactId>
                    <version>2.3.5</version>
                    <executions>
                        <execution>
                            <id>generate-features-file</id>
                            <goals>
                                <goal>generate-features-file</goal>
                            </goals>
                            <configuration>
                                <karafVersion>2.3.5</karafVersion>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
           ...

The pom in com/company/ssb/nbda/pm/api/0.9.1/ is as follows:

...
  <groupId>com.company.ssb.nbda.pm</groupId>
  <artifactId>api</artifactId>
  <version>0.9.1</version>
  <dependencies>
    <dependency>
      <groupId>com.company.ssb.pm.common</groupId>
      <artifactId>pmcore</artifactId>
      <version>[0.1,)</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.company.ssb.cil.client</groupId>
      <artifactId>service</artifactId>
      <version>[0.10,)</version>
      <scope>compile</scope>
    </dependency>
 ...

Upvotes: 2

Views: 2022

Answers (1)

Angelo Fuchs
Angelo Fuchs

Reputation: 9941

Its most likely a bug. I just dug into the code of Karaf and Maven, but couldn't find the correct place in the time frame I set myself for this, but some other interesting things, have a read:

I noticed that your Karaf 2.3.5 uses maven 3.0. alpha 2. So, most likely upgrading to Karaf 3.0.1 will help you but keep in mind that the commands for feature-maven-plugin have changed. If not, file a bug report with the data from this question here: https://issues.apache.org/jira/browse/KARAF

I took a look into the GenerateFeaturesFileMojo.java.

The method thats failing there (line 407) contains the code that searches the META-INF/MANIFEST.MF for bundle informations.

This invokes the DefaultArtifactResolver.java (as you can also see in your stack trace) on a deprecated method, where the url is constructed through the ArtifactRequest.java (that you can't see in stack trace)

From there it continues into the maven code of resolving Artifacts, this is code that works well in Maven, so I assumed it would do so here, given that the Artifact information is correct.

So I started poking around the Karef code to figure out how the Artifact Objects are build in the first place but couldn't understand it easily, so I tried to figure out where the Artifacts were build and came across comments (and code) that said things like "@TODO: That works for now but it should be fixed" at places where the version came into the artifacts.

So, while this unfortunately is not a definite answer, your approach should work, if it doesn't its a bug.

Upvotes: 1

Related Questions