[rules-users] Avoid parsiong project pom.xml when running Drools

Sandjaja, Dominik dominik.sandjaja at it-motive.de
Thu Mar 13 11:07:04 EDT 2014


Hello,

I am using Drools 6.1.0.Beta1 in a project with the following (shortened) pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>de.test.configuration</groupId>
        <artifactId>someTest</artifactId>
        <version>0.7.0-SNAPSHOT</version>
        <packaging>jar</packaging>
        <name>droolsTest</name>

        <parent>
                <groupId>de.test</groupId>
                <artifactId>maven-parent</artifactId>
                <version>0.3</version>
        </parent>

        <dependencies>
                <!-- The Drools rule engine -->
                <dependency>
                        <groupId>org.drools</groupId>
                        <artifactId>drools-core</artifactId>
                        <version>6.1.0.Beta1</version>
                </dependency>
                <dependency>
                        <groupId>org.drools</groupId>
                        <artifactId>drools-compiler</artifactId>
                        <version>6.1.0.Beta1</version>
                </dependency>
                <!-- getting maven artefacts -->
                <dependency>
                        <groupId>org.kie</groupId>
                        <artifactId>kie-ci</artifactId>
                        <version>6.1.0.Beta1</version>
                </dependency>
        </dependencies>
</project>

For the internal maven, used within KIE/Drools, I have a separate settings.xml, which is configured with the property -Dkie.maven.settings.custom="X:\\droolsmaven\\settings.xml"
The contents of this file are:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">

        <localRepository>x:/droolsmaven/repository</localRepository>

        <profiles>
                <profile>
                        <id>mavenDroolsProfile</id>
                        <activation>
                                <activeByDefault>true</activeByDefault>
                        </activation>

                        <repositories>

                                <repository>
                                        <id>someRepo</id>
                                        <url>http://1.2.3.4</url>
                                        <releases>
                                                <enabled>false</enabled>
                                        </releases>
                                        <snapshots>
                                                <enabled>false</enabled>
                                        </snapshots>
                                </repository>

                                <repository>
                                        <id>central</id>
                                        <url>http://repo1.maven.org/maven2</url>
                                        <releases>
                                        <enabled>false</enabled>
                                        </releases>
                                        <snapshots>
                                                <enabled>false</enabled>
                                        </snapshots>
                                </repository>
                        </repositories>
                </profile>
        </profiles>

</settings>

In that local repository, the respective artifact used later is deployed, which is working, confirmed with a non-maven-project.

Now, when trying running the following code within the maven project which is defined by the above mentioned pom, I get the errors mentioned after this code block:

public class MainKieTest {

    public static void main(String[] args) {
        KieServices ks = KieServices.Factory.get();

        KieRepository repository = ks.getRepository();
        ReleaseId releaseId = ks.newReleaseId("de.test.package", "artifact", "1.0.1");

        KieContainer kieContainer = ks.newKieContainer(releaseId);

        KieScanner kieScanner = ks.newKieScanner(kieContainer);
        kieScanner.scanNow();
    }
}

The error is:

DEBUG [main] (KieRepositoryImpl.java:92) - KieModule Lookup. ReleaseId de.test.package:artifact:1.0.1 was not in cache, checking classpath
DEBUG [main] (KieRepositoryImpl.java:98) - KieModule Lookup. ReleaseId de.test.package:artifact:1.0.1 was not in cache, checking maven repository
 WARN [main] (MavenSettings.java:47) - Environment variable M2_HOME is not set
DEBUG [main] (Logs.java:390) - Add publisher: com.google.inject.internal.InjectorImpl at 5221dfe5

-----[explicit bindings]-------------------------------------------------------
0. ProviderInstanceBinding{key=Key[type=com.google.inject.Injector, annotation=[none]], source=[unknown source], scope=Scopes.NO_SCOPE, provider=Provider<Injector>}
[...] lines cut for brevity
198. ConstructorBinding{key=Key[type=org.apache.maven.lifecycle.DefaultSchedules, annotation=[none]], source=ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]], scope=Scopes.SINGLETON}
-----[implicit bindings]-------------------------------------------------------
-------------------------------------------------------------------------------

Exception in thread "main" java.lang.RuntimeException: org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM: Could not find artifact de.test:maven-parent:pom:0.3 and 'parent.relativePath' points at wrong local POM @ line 15, column 10

        at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:21)
        at org.kie.scanner.embedder.MavenProjectLoader.loadMavenProject(MavenProjectLoader.java:48)
        at org.kie.scanner.Aether.<init>(Aether.java:44)
        at org.kie.scanner.Aether.getAether(Aether.java:54)
        at org.kie.scanner.MavenRepository.getMavenRepository(MavenRepository.java:53)
        at org.kie.scanner.ArtifactResolver.<init>(ArtifactResolver.java:36)
        at org.kie.scanner.KieRepositoryScannerImpl.getArtifactResolver(KieRepositoryScannerImpl.java:77)
        at org.kie.scanner.KieRepositoryScannerImpl.loadArtifact(KieRepositoryScannerImpl.java:87)
        at org.kie.scanner.KieRepositoryScannerImpl.loadArtifact(KieRepositoryScannerImpl.java:83)
        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:106)
        at de.test.configuration.kie.MainKieTest.main(MainKieTest.java:40)
Caused by: org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM: Could not find artifact de.test:maven-parent:pom:0.3 and 'parent.relativePath' points at wrong local POM @ line 15, column 10

        at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:363)
        at org.kie.scanner.embedder.MavenEmbedder.buildProjects(MavenEmbedder.java:335)
        at org.kie.scanner.embedder.MavenEmbedder.readProjects(MavenEmbedder.java:319)
        at org.kie.scanner.embedder.MavenEmbedder.readProject(MavenEmbedder.java:312)
        at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:19)
        ... 13 more

The problem seems to be, that the Maven which is internal to Drools/KIE, also tries to build the complete dependency tree, given by the pom.xml of the project in which KIE runs.

IMHO, this should not be, because the maven artifacts deployed for Drools, used at runtime, are independent from the artifacts used for building the project itself; those are needed at buildtime.

Is this problem just a misconception of how I think Drools should work or is it an actual bug?

Thanks in advance
Dominik

PS: Sorry, if the formatting is messed up, but I have to use Outlook for crafting this message ...

…………………………………………………………………
mit freundlichen Grüßen / kind regards
Dominik Sandjaja
Fon: +49 (0) 203 60878 183
Fax: +49 (0) 203 60878 222
e-mail: dominik.sandjaja at it-motive.de

it-motive AG
Zum Walkmüller 6
47269 Duisburg
info at it-motive.de
http://www.it-motive.de
……………………………………………………………………
Vorsitzender des Aufsichtsrats: Dr.-Ing. Jürgen Sturm
Vorstand: Horst-Dieter Deelmann (Vors.),  Matthias Heming, Christoph Tim Klose
HRB 9207, Amtsgericht Duisburg



More information about the rules-users mailing list