0

我们刚开始使用 Drools 6,并尝试使用我们内部 Nexus 存储库中的规则工件。

当工件存在于本地存储库中时,一切正常。

但是,当尝试从存储库中检索工件时,我们会遇到以下异常:

WARN  MavenRepository - Unable to resolve artifact: foo.bar.rules.callflow.res:rules-callflow-res:1.0.0-SNAPSHOT
org.sonatype.aether.resolution.ArtifactResolutionException: Could not transfer artifact foo.bar.rules.callflow.res:rules-callflow-res:jar:1.0.0-SNAPSHOT from/to nexus (http://nexus:8081/nexus/content/groups/public): No connector available to access repository nexus (http://nexus:8081/nexus/content/groups/public) of type  using the available factories FileRepositoryConnectorFactory, WagonRepositoryConnectorFactory
at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:538)
at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:216)
at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:193)
at org.sonatype.aether.impl.internal.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:286)
at org.kie.scanner.MavenRepository.resolveArtifact(MavenRepository.java:205)
at org.kie.scanner.MavenRepository.resolveArtifact(MavenRepository.java:194)
at org.kie.scanner.ArtifactResolver.resolveArtifact(ArtifactResolver.java:51)
at org.kie.scanner.KieRepositoryScannerImpl.loadArtifact(KieRepositoryScannerImpl.java:100)
at org.kie.scanner.KieRepositoryScannerImpl.loadArtifact(KieRepositoryScannerImpl.java:93)
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.loadKieModuleFromMavenRepo(KieRepositoryImpl.java:114)
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:100)
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:77)
at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:97)
at foo.bar.rules.callflow.res.CallflowRESTests.test0800800800(CallflowRESTests.java:36)

这是我们的测试类:

public class CallflowRESTests
{

        private KieServices ks;
    private KieContainer kContainer;

    @Before
    public void setup() {
        ks = KieServices.Factory.get();
    }

    @Test
    public void test0800800800() {
        try
        {
            ReleaseId releaseId = ks.newReleaseId("foo.bar.rules.callflow.res","rules-callflow-res","1.0.0-SNAPSHOT");
            KieContainer kContainer = ks.newKieContainer(releaseId);
            // Extra code removed since problem occurs in the line above
        } catch (Exception e)
        {
            e.printStackTrace();
        }

    }
}

该工件存在于我们的内部 Nexus 存储库中,但是当我运行测试类时,它从不尝试连接到它(使用 Wireshark 检查)。

我在这里缺少什么部分?

4

1 回答 1

0

经过数小时的调查,我似乎找到了无法从远程 Maven 存储库检索规则工件的问题的原因。根本原因是我们在 Maven 配置中的 settings.xml 中的一个部分。一旦我删除了这个部分,我们的规则实现就能够从我们的远程 Nexus 存储库中检索规则工件。但是,似乎在尝试连接到我们配置的存储库(在 settings.xml 中)之前,它会尝试联系外部 IP 地址,但这似乎是 maven 问题而不是规则问题。

编辑 27.03.2015:在 Maven settings.xml 中使用 Drools 6.1.0.Final 时,您必须添加该行

<layout>default</layout> 

到镜像配置。之后它应该工作。

于 2015-01-23T06:42:43.513 回答