2016-04-28 106 views
0

我刚开始使用Drools并尝试将其与Spark Streaming作业集成。我正在使用Drools 6.3.0.Final与kie-ci,所以我可以从我的spark工作中远程调用我的kJar,并使用kie扫描程序更新是否有更新的版本。不过,我跑进了以下异常:Drools Kie Scanner 6.3.0最后抛出ProvisionException(未找到RepositorySystem)

016-04-27 10:22:32,360 WARN [streaming-job-executor-0] Sisu (Logs.java:warn(394)) - Error injecting: org.apache.maven.execution.DefaultMavenExecutionRequestPopulator 
com.google.inject.ProvisionException: Guice provision errors: 

1) No implementation for org.apache.maven.repository.RepositorySystem was bound. 
while locating org.apache.maven.execution.DefaultMavenExecutionRequestPopulator 

1 error 
at com.google.inject.internal.InjectorImpl$3.get(InjectorImpl.java:974) 
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1000) 
at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48) 
at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:84) 
at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:52) 
at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:70) 
at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:100) 
at org.eclipse.sisu.plexus.PlexusLifecycleManager.onProvision(PlexusLifecycleManager.java:133) 
at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:108) 
at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:55) 
at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:68) 
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:1018) 
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) 
at com.google.inject.Scopes$1$1.get(Scopes.java:59) 
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) 
at com.google.inject.internal.InjectorImpl$3$1.call(InjectorImpl.java:965) 
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1011) 
at com.google.inject.internal.InjectorImpl$3.get(InjectorImpl.java:961) 
at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:82) 
at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51) 
at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:260) 
at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:252) 
at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:246) 
at org.kie.scanner.embedder.PlexusComponentProvider.lookup(PlexusComponentProvider.java:42) 
at org.kie.scanner.embedder.MavenEmbedder.buildMavenExecutionRequest(MavenEmbedder.java:111) 
at org.kie.scanner.embedder.MavenEmbedder.<init>(MavenEmbedder.java:84) 
at org.kie.scanner.embedder.MavenEmbedder.<init>(MavenEmbedder.java:75) 
at org.kie.scanner.embedder.MavenEmbedder.<init>(MavenEmbedder.java:69) 
at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:55) 
at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:49) 
at org.kie.scanner.ArtifactResolver.getResolverFor(ArtifactResolver.java:127) 
at org.kie.scanner.ArtifactResolver.getResolverFor(ArtifactResolver.java:90) 
at org.kie.scanner.KieRepositoryScannerImpl.setKieContainer(KieRepositoryScannerImpl.java:88) 
at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieScanner(KieServicesImpl.java:139) 

我建立了我的远程储存在我的settings.xml在那里我正常运行的火花,因为它拉时,它创建的KieContainer正确最新的罐子。只有在出于某种原因包含KieScanner时,它才会失败。

我的代码如下所示:

KieServices ks = KieServices.Factory.get(); 
ReleaseId releaseId = ks.newReleaseId("test", "test", "LATEST"); 
KieContainer kieContainer = ks.newKieContainer(releaseId); 
KieSession kSession = kieContainer.newKieSession(); 

KieScanner kScanner = ks.newKieScanner(kieContainer); 
kScanner.scanNow(); 
kSession.fireAllRules(); 
kSession.dispose(); 

我正在星火1.6.1使用Hadoop 1,如果我使用其他包装星火版本具有更高的Hadoop,它将失败,一个不同的异常

(java.lang.NoSuchMethodError: com.google.inject.Binder.bindListener)

有谁知道我为什么或如何解决这个问题?

回答

1

我有一个类似的问题,为Flink生成一个超级罐子。这是因为我的Maven遮罩配置不完整而且来自各种瓶子的魔术META-INF/**配置文件被覆盖。通过将下列变压器添加到Maven灯罩配置中解决了这个问题:

<transformer implementation="org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer"/> 
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> 
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
    <resource>META-INF/sisu/javax.inject.Named</resource> 
</transformer> 
相关问题