2017-04-06 56 views
1

所以我想在我的代碼中嵌入maven,而不是使用shell包裝,但是我遇到問題才能實際工作。Maven Embedded 3.3.9 - 有可能嗎?

Source Code

master分支工作但它是Maven的(3.1.1)的舊版本,我想用一個較新的版本。

339分支擁有我可以針對在pom.xml中定義的版本的所有依賴關係。

然而,沒有任何數量的依賴關係將有助於避免以下錯誤。

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 

我走過每一個SO問題,我可以找到並閱讀大量的郵件列表中消失,但好像很少有人想這樣做,或者我只是失敗。

你很好的人有什麼想法嗎?

+0

這是什麼目的? – khmarbaise

+0

我在室內自動化系統中運行這個內容,並希望避免使用進程封裝。 – xandout

+0

問題是什麼?爲什麼不像往常一樣通過命令行調用maven呢?問題是你想要解決什麼樣的問題? – khmarbaise

回答

1

我剛碰到同樣的問題。我希望對於解決方案來說還不算太晚 您得到的問題與使用maven-embbder insite shaed/fatjat/jarwithdependencies有關 當您創建jar-with-dependencies時,可能會在許多jar中定義一些資源,但只有一個被包裝在罐子裏(最後一個被處理)。這裏是哪裏出了問題與Maven和叢 需要修復此問題,你應該在META-INF /叢/ components.xml文件和文件/META-INF/sisu/javax.inject.Named規定:

  • 在構建與依賴關係的jar文件時排除所有這些文件
  • 在您的項目中創建此文件作爲您依賴項中包含的文件的連接。

在我的情況下,我使用maven-shade-plugin來構建jar-with-dependecies。因此,要排除的依賴罐子中的文件做這樣:只有

  <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> 

這樣的ETA-INF /叢/ components.xml文件和你/META-INF/sisu/javax.inject.Named創建項目包括在fatjar