Skip to content

Commit

Permalink
Updated test and removed unecessary sisu annotations.
Browse files Browse the repository at this point in the history
  • Loading branch information
splatch committed Jan 26, 2017
1 parent e0b9797 commit 67e3b31
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 13 deletions.
40 changes: 36 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,41 @@ To avoid troubles a small customization of version resolver has been created.

## Current troubles
While this code is pretty messy and does embed `osgi.core` jar it does quite simple thing. Most of code comes from requirements
of aether api implementations. For example `DefaultVersionRangeResolver` despite of its name is not meant to be extended which
brought most of code to project.
Test classes (beyond OsgiVersionRangeResolverTest) is copy of `aether-impl` base classes.
of aether api implementations. For example maven's `DefaultVersionRangeResolver` despite of its name is not meant to be extended which
brought most of code to this project.
Test classes (beyond OsgiVersionRangeResolverTest) is copy of `aether-impl` version test classe.

### Usage in Maven build
Even if maven uses aether for some dependency resolution it is currently not possible to use this component as build extension.
To take benefit of OSGi version ranges please create in root of your multi module project `.mvn/extensions.xml` file and place there:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<extensions>
<extension>
<groupId>org.code-house.maven</groupId>
<artifactId>osgi</artifactId>
<version>[version]</version>
</extension>
</extensions>
```

### Version range types
Main difference between Maven and OSGi is how they understand versioning in general and then how they treat ranges. For example
both allows to specify "default" version. In case of Maven it's `RELEASE`, in case of OSGi it will be `0.0.0`. Maven users can
also point to latest available snapshot in any version by using `LATEST` version on dependency. This has no effect in OSGi since
it does not distinguish version types.

#### Strict
Strict resolver always uses OSGi logic for resolving versions.

#### Compatible
Compatible resolver uses OSGi range logic but keeps maven's version types allowing to order versions in natural way (ie. SNAPSHOT < RELEASE).


## Discamler
Even if maven uses Eclipse Aether (which is abandoned and being transferred to Apache Software Foundation) which uses component
oriented architecture, coupling between different types is so high that changing this logic might bring side effects. Always
verify your build after plugging in this extension.

This extension overrides single core component from maven core and might not work with further versions of maven. See investigation notes
on [maven users](http://markmail.org/message/z6x27umabwqhdjvy) and [developers](http://markmail.org/message/r2jnrtwrio75v4zq)
mailing lists.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
import org.code_house.maven.osgi.resolver.version.OsgiVersionScheme;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.util.IOUtil;
import org.eclipse.aether.RepositoryEvent;
import org.eclipse.aether.RepositorySystemSession;
Expand Down Expand Up @@ -35,22 +34,16 @@
import org.eclipse.aether.version.Version;
import org.eclipse.aether.version.VersionConstraint;
import org.eclipse.aether.version.VersionScheme;
import org.eclipse.sisu.Priority;

import javax.inject.Inject;
import javax.inject.Named;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component(
role = VersionRangeResolver.class
//, hint = "enhanced"
)
@Priority(3000)
@Component(role = VersionRangeResolver.class)
public class OsgiVersionRangeResolver implements VersionRangeResolver {

private static final String MAVEN_METADATA_XML = "maven-metadata.xml";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.code_house.maven.osgi.resolver;

import org.code_house.maven.osgi.resolver.version.OsgiVersion;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.impl.VersionRangeResolver;
Expand Down Expand Up @@ -57,7 +58,11 @@ public void testResolveRange() throws Exception {

LinkedList<String> resolved = new LinkedList<>();
for (Version version : versions) {
resolved.add(version.toString());
if (version instanceof OsgiVersion) {
resolved.add(((OsgiVersion) version).getRawVersion());
} else {
resolved.add(version.toString());
}
}

Iterator<String> iterator = resolved.iterator();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<component-set>
<components>
<component>
<role>org.eclipse.aether.impl.VersionRangeResolver</role>
<role-hint>default</role-hint>
<implementation>org.code_house.maven.osgi.resolver.OsgiVersionRangeResolver</implementation>
<description></description>
<isolated-realm>false</isolated-realm>
</component>
</components>
</component-set>

0 comments on commit 67e3b31

Please sign in to comment.