2222import java .net .URLConnection ;
2323import java .util .List ;
2424
25+ import org .osgi .service .component .annotations .Component ;
26+ import org .osgi .service .component .annotations .Reference ;
2527import org .osgi .service .url .AbstractURLStreamHandlerService ;
28+ import org .osgi .service .url .URLConstants ;
29+ import org .osgi .service .url .URLStreamHandlerService ;
2630
2731import org .eclipse .aether .RepositorySystem ;
2832import org .eclipse .aether .RepositorySystemSession ;
4044import org .apache .maven .RepositoryUtils ;
4145import org .apache .maven .artifact .repository .ArtifactRepository ;
4246
43- import org .eclipse .m2e .core .MavenPlugin ;
4447import org .eclipse .m2e .core .embedder .ICallable ;
4548import org .eclipse .m2e .core .embedder .IMaven ;
4649import org .eclipse .m2e .core .embedder .IMavenExecutionContext ;
4750
4851
49- // @Component(service = URLStreamHandlerService.class, property = URLConstants.URL_HANDLER_PROTOCOL + "=mvn", immediate = true )
52+ @ Component (service = URLStreamHandlerService .class , property = URLConstants .URL_HANDLER_PROTOCOL + "=mvn" )
5053public class MvnProtocolHandlerService extends AbstractURLStreamHandlerService {
5154
52- public MvnProtocolHandlerService () {
53- }
55+ @ Reference
56+ IMaven maven ;
5457
5558 @ Override
5659 public URLConnection openConnection (URL url ) {
57- return new MavenURLConnection (url );
60+ //TODO replace reference with IMaven maven = MavenPlugin.getMaven();
61+ //this is required to make the component active even if m2e itself is not running at the moment
62+ //that will make the m2e protocol available from the start of eclipse
63+ //See https://github.com/eclipse-equinox/equinox/pull/290
64+ return new MavenURLConnection (url , maven );
5865 }
5966
6067 private static final class MavenURLConnection extends URLConnection {
@@ -63,8 +70,11 @@ private static final class MavenURLConnection extends URLConnection {
6370
6471 private ArtifactResult artifactResult ;
6572
66- protected MavenURLConnection (URL url ) {
73+ private IMaven maven ;
74+
75+ protected MavenURLConnection (URL url , IMaven maven ) {
6776 super (url );
77+ this .maven = maven ;
6878 }
6979
7080 @ Override
@@ -92,9 +102,7 @@ public void connect() throws IOException {
92102 String classifier = coordinates .length > 4 ? coordinates [4 ] : null ;
93103 Artifact artifact = new DefaultArtifact (coordinates [0 ], coordinates [1 ], classifier , type , coordinates [2 ]);
94104 try {
95- IMaven maven = MavenPlugin .getMaven ();
96- RepositorySystem repoSystem = org .eclipse .m2e .core .internal .MavenPluginActivator .getDefault ()
97- .getRepositorySystem ();
105+ RepositorySystem repoSystem = maven .lookup (RepositorySystem .class );
98106 IMavenExecutionContext context = maven .createExecutionContext ();
99107 List <ArtifactRepository > artifactRepositories = maven .getArtifactRepositories ();
100108 List <RemoteRepository > remoteRepositories = RepositoryUtils .toRepos (artifactRepositories );
0 commit comments