2017-04-06 5 views
1

Also versuche ich, Maven in meinen Code einzubetten, anstatt einen Shell-Wrapper zu verwenden, aber ich habe Probleme, damit es funktioniert.Maven Embedded 3.3.9 - Ist es möglich?

Source Code

Der master Zweig arbeitet jedoch ist es eine ältere Version von Maven (3.1.1), und ich möchte eine neuere Version verwenden.

Der Zweig 339 hat alle Abhängigkeiten, die ich für die in pom.xml definierte Version festlegen kann.

Allerdings wird kein Spiel mit den Abhängigkeiten helfen, den folgenden Fehler zu vermeiden.

java -jar maven-embedder-example-1-jar-with-dependencies.jar package 
[main] WARN Sisu - Error injecting: org.apache.maven.project.DefaultProjectBuildingHelper 
com.google.inject.ProvisionException: Unable to provision, see the following errors: 

1) No implementation for org.apache.maven.classrealm.ClassRealmManager was bound. 
    while locating org.apache.maven.project.DefaultProjectBuildingHelper 

1 error 
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1025) 
    at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051) 
    at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48) 
    at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81) 
    at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:53) 
    at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:65) 
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:115) 
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:133) 
    at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68) 
    at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:63) 
    at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:45) 
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) 
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) 
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) 
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145) 
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) 
    at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016) 
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) 
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012) 
    at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:81) 
    at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51) 
    at org.eclipse.sisu.plexus.PlexusRequirements$RequirementProvider.get(PlexusRequirements.java:250) 
    at org.eclipse.sisu.plexus.ProvidedPropertyBinding.injectProperty(ProvidedPropertyBinding.java:48) 
    at org.eclipse.sisu.bean.BeanInjector.injectMembers(BeanInjector.java:52) 
    at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:140) 
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114) 
    at com.google.inject.internal.ConstructorInjector.access$000(ConstructorInjector.java:32) 
    at com.google.inject.internal.ConstructorInjector$1.call(ConstructorInjector.java:89) 
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:115) 
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:133) 
    at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68) 
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:87) 
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267) 
    at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016) 
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) 
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012) 
    at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051) 
    at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48) 
    at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81) 
    at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:53) 
    at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:65) 
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:115) 
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:133) 
    at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68) 
    at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:63) 
    at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:45) 
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) 
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) 
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) 
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145) 
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) 
    at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016) 
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) 
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012) 
    at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:81) 
    at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51) 
    at org.eclipse.sisu.plexus.PlexusRequirements$RequirementProvider.get(PlexusRequirements.java:250) 
    at org.eclipse.sisu.plexus.ProvidedPropertyBinding.injectProperty(ProvidedPropertyBinding.java:48) 
    at org.eclipse.sisu.bean.BeanInjector.injectMembers(BeanInjector.java:52) 
    at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:140) 
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114) 
    at com.google.inject.internal.ConstructorInjector.access$000(ConstructorInjector.java:32) 
    at com.google.inject.internal.ConstructorInjector$1.call(ConstructorInjector.java:89) 
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:115) 
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:133) 
    at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68) 
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:87) 
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267) 
    at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016) 
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) 
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012) 
    at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051) 
    at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48) 
    at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81) 
    at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:53) 
    at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:65) 
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:115) 
    at org.eclipse.sisu.bean.BeanScheduler$Activator.onProvision(BeanScheduler.java:176) 
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:126) 
    at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68) 
    at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:63) 
    at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:45) 
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) 
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) 
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) 
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145) 
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) 
    at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016) 
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) 
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012) 
    at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:81) 
    at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51) 
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:263) 
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:255) 
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:249) 
    at org.apache.maven.cli.MavenCli.container(MavenCli.java:585) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:281) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:243) 
    at tc_turner.maven_embedder_example.Main.main(Main.java:10) 
[main] WARN Sisu - Error injecting: org.apache.maven.project.DefaultProjectBuilder 
com.google.inject.ProvisionException: Unable to provision, see the following errors: ....... More of the same 

Ich habe durch jede SO Frage gegangen ich und lese viele Mailinglisten finden, aber es scheint, wie sehr wenige Menschen wollen, dies zu tun oder ich versagen gerade.

Haben Sie gut Leute haben eine Idee?

+0

Was ist der Zweck dieser? – khmarbaise

+0

Ich führe dies innerhalb eines Inhouse-Automatisierungssystems und möchte vermeiden, einen Prozesswrapper zu verwenden. – xandout

+0

Was ist das Problem? Warum nicht einfach Maven wie üblich von der Befehlszeile aus aufrufen, was funktioniert ... Die Frage ist, welche Art von Problem versuchen Sie zu lösen? – khmarbaise

Antwort

1

Ich habe gerade das gleiche Problem wie Sie getroffen. Ich hoffe, es ist nicht zu spät für eine Lösung Das Problem, das Sie haben, ist im Zusammenhang mit Maven-Embbder innerhalb einer Shaed/fatjat/jarwithdependencies Wenn Sie die jar-with-Abhängigkeiten erstellen, können einige Ressourcen in vielen Gläsern aber nur eine definiert werden ist in das Glas gepackt (das letzte verarbeitet). Hier ist, wo das Problem mit dem META-INF/Plexus/components.xml und /META-INF/sisu/javax.inject.Named Dateien benötigt von Maven und Plexus dem Update dieses Problem legt sollten Sie:

  • Schließen Sie alle diese Dateien aus, wenn Sie das jar-with-dependencies erstellen
  • Erstellen Sie diese Dateien in Ihrem Projekt als Verkettungen der Dateien, die in Ihren Abhängigkeiten enthalten sind.

In meinem Fall verwende ich maven-shade-plugin, um die jar-with-dependences zu erstellen. So auszuschließen die Dateien aus dem Abhängigkeits Glas wird so gemacht:

  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <manifestEntries> 
            <Main-Class>io.vertx.core.Starter</Main-Class> 
            <Main-Verticle>main.Main</Main-Verticle> 
           </manifestEntries> 
          </transformer> 
         </transformers> 
         <filters> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
          <filter> 
           <artifact>org.sonatype.plexus:*</artifact> 
           <excludes> 
            <exclude>META-INF/plexus/components.xml</exclude> 
            <exclude>META-INF/sisu/javax.inject.Named</exclude> 
           </excludes> 
          </filter> 
          <filter> 
           <artifact>org.apache.maven:*</artifact> 
           <excludes> 
            <exclude>META-INF/plexus/components.xml</exclude> 
            <exclude>META-INF/sisu/javax.inject.Named</exclude> 
           </excludes> 
          </filter> 
          <filter> 
           <artifact>org.eclipse.aether:*</artifact> 
           <excludes> 
            <exclude>META-INF/sisu/javax.inject.Named</exclude> 
           </excludes> 
          </filter> 
          <filter> 
           <artifact>io.vertx:*</artifact> 
           <excludes> 
            <exclude>META-INF/sisu/javax.inject.Named</exclude> 
           </excludes> 
          </filter> 
         </filters> 
         <artifactSet> 
          <excludes> 
           <exclude>org.eclipse.xpand:*</exclude> 
           <exclude>org.mod4j.org.eclipse.xtend.util:*</exclude> 
           <exclude>com.ibm.icu:*</exclude> 
           <exclude>org.mod4j.*:*</exclude> 
           <exclude>*:*:tests</exclude> 
          </excludes> 
         </artifactSet> 
           <shadedArtifactAttached>true</shadedArtifactAttached> 
           <shadedClassifierName>fat</shadedClassifierName> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Auf diese Weise nur die ETA-INF/Plexus/components.xml und /META-INF/sisu/javax.inject.Named in Ihnen erstellt Projekt sind in der Fatjar enthalten

Verwandte Themen