[jboss-jira] [JBoss JIRA] (DROOLS-754) KieScanner crash while erroneously trying to resolve non necessary dependencies
Matteo Mortari (JIRA)
issues at jboss.org
Tue Mar 31 05:44:19 EDT 2015
[ https://issues.jboss.org/browse/DROOLS-754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13054894#comment-13054894 ]
Matteo Mortari commented on DROOLS-754:
---------------------------------------
*Workaround*: on the internal Maven repo custom Nexus repo indicated in the custom kie-settings.xml, do proxy not only Maven central, but ALSO JBoss repository (at the time writing: http://repository.jboss.org/nexus/content/groups/public/). Doing so, would not fail in resolving the dependencies for /org/jboss/dashboard-builder/dashboard-builder-bom and org/dashbuilder/dashbuilder-bom, hence it will work.
However as mentioned it could not be possible to have the internal Maven repo / custom Nexus repo to also do the proxy, if the business need it only and just for kjar store?
> KieScanner crash while erroneously trying to resolve non necessary dependencies
> -------------------------------------------------------------------------------
>
> Key: DROOLS-754
> URL: https://issues.jboss.org/browse/DROOLS-754
> Project: Drools
> Issue Type: Bug
> Components: core engine
> Affects Versions: 6.2.0.Final
> Environment: kie-ci
> Reporter: Matteo Mortari
> Assignee: Mario Fusco
> Attachments: 20150331.DROOLS-754.zip
>
>
> h5. Overview
> Given kie.maven.settings.custom to force KIE libraries to reference only an internal nexus repo without Maven-central proxy just for the kjar of the rules.
> Given a KieContainer created with ReleaseId, trying to create a KieScanner would fail if the kjar of the release ID contain parametrized versions in the POM, because the KiScanner does not substitute the parameter, and moreover it tries to resolve them anyway even if those dependencies are not actually needed because having scope=test.
> Even changing the internal nexus repo, althought may not be feasible, for Maven-central proxy (http://repo1.maven.org/maven2/) would fail in resolving other dependencies.
> *keypoint*: have a way to instruct KIE KieContainer AND KieScanner, to reference just-and-only an internal Nexus repo just and only for the KJar for the rules, without having to internally proxy or double-check Maven central, please?
> Could you kindly advise accordingly, please?
> h5. Details
> Given a kjar artifact named {{kiescanner-testandversionissue-rules}} with the following pom (extract):
> {code:xml}
> <properties>
> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
> <drools-version>6.2.0.Final</drools-version>
> <slf4j-version>1.7.2</slf4j-version>
> <junit-version>4.11</junit-version>
> </properties>
>
> <dependencyManagement>
> <dependencies>
> <dependency>
> <groupId>org.drools</groupId>
> <artifactId>drools-bom</artifactId>
> <type>pom</type>
> <version>${drools-version}</version>
> <scope>import</scope>
> </dependency>
> </dependencies>
> </dependencyManagement>
> <dependencies>
>
> <dependency>
> <groupId>org.drools</groupId>
> <artifactId>drools-compiler</artifactId>
> <scope>test</scope>
> </dependency>
> <dependency>
> <groupId>junit</groupId>
> <artifactId>junit</artifactId>
> <version>${junit-version}</version>
> <scope>test</scope>
> </dependency>
> <dependency>
> <groupId>org.slf4j</groupId>
> <artifactId>slf4j-log4j12</artifactId>
> <version>${slf4j-version}</version>
> <scope>test</scope>
> </dependency>
> </dependencies>
> {code}
> Please notice the dependencies are parametrized in the versions, and moreover are not really required for runtime because scope=test.
> Now assume this kjar is deployed to a maven repo, like a nexus repository.
> Now given a client application havign kie.maven.settings.custom to force KIE libraries to reference only an internal nexus repo:
> {code}
> ReleaseId rId = kieServices.newReleaseId( "com.acme", "kiescanner-testandversionissue-rules", "RELEASE" );
> KieContainer kieContainer = kieServices.newKieContainer( rId );
> LOG.info("kieContainer exists. {}", kieContainer);
> LOG.info("Now about to create kieScanner...");
> KieScanner kScanner = kieServices.newKieScanner( kieContainer );
> kScanner.start( KIE_SCANNER_INTERVAL );
> {code}
> This code will fail with the following in the log (extract):
> {code}
> INFO [com.acme.kiescanner_testandversionissue_client.App] (main) kieContainer exists. org.drools.compiler.kie.builder.impl.KieContainerImpl at 1229a2b7
> INFO [com.acme.kiescanner_testandversionissue_client.App] (main) Now about to create kieScanner...
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Sending request: GET /nexus/content/groups/public/org/slf4j/slf4j-log4j12/$%7Bslf4j-version%7D/slf4j-log4j12-$%7Bslf4j-version%7D.pom HTTP/1.1
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Receiving response: HTTP/1.1 404 Not Found
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:56971<->127.0.0.1:8081 closed
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:56971<->127.0.0.1:8081 closed
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Sending request: GET /nexus/content/groups/public/junit/junit/$%7Bjunit-version%7D/junit-$%7Bjunit-version%7D.pom HTTP/1.1
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Receiving response: HTTP/1.1 404 Not Found
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:56972<->127.0.0.1:8081 closed
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:56972<->127.0.0.1:8081 closed
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Sending request: GET /nexus/content/groups/public/org/drools/drools-bom/$%7Bdrools-version%7D/drools-bom-$%7Bdrools-version%7D.pom HTTP/1.1
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Receiving response: HTTP/1.1 404 Not Found
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:56973<->127.0.0.1:8081 closed
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:56973<->127.0.0.1:8081 closed
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Sending request: GET /nexus/content/groups/public/org/slf4j/slf4j-log4j12/$%7Bslf4j-version%7D/slf4j-log4j12-$%7Bslf4j-version%7D.jar HTTP/1.1
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Receiving response: HTTP/1.1 404 Not Found
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:56974<->127.0.0.1:8081 closed
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:56974<->127.0.0.1:8081 closed
> WARN [org.kie.scanner.MavenRepository] (main) Unable to resolve artifact: org.slf4j:slf4j-log4j12:${slf4j-version}
> {code}
> We can notice two issues:
> * the ${...-version} is not substitued while trying to resolve these artifacts on the nexus repo, the URL contains the ${...-version} literally
> * actually why the KieScanner try to resolve them given the dependencies are scope=test ?
> Also, even changing the internal nexus repo for Maven-central proxy (http://repo1.maven.org/maven2/) by:
> nexus connect with default user admin/admin123, add proxy repo http://repo1.maven.org/maven2/), go to group "public" and add the proxy, erase local-user .m2 drools-bom to force re-resolution,
> And re-running the client application again, would instead crash in resolving the following:
> {code}
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Sending request: HEAD /nexus/content/groups/public/org/jboss/dashboard-builder/dashboard-builder-bom/6.2.0.Final/dashboard-builder-bom-6.2.0.Final.pom HTTP/1.1
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Receiving response: HTTP/1.1 404 Not Found
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:57598<->127.0.0.1:8081 closed
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:57598<->127.0.0.1:8081 closed
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Sending request: HEAD /nexus/content/groups/public/org/dashbuilder/dashbuilder-bom/0.2.1.Final/dashbuilder-bom-0.2.1.Final.pom HTTP/1.1
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Receiving response: HTTP/1.1 404 Not Found
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:57599<->127.0.0.1:8081 closed
> DEBUG [org.apache.http.impl.conn.DefaultClientConnection] (main) Connection 0.0.0.0:57599<->127.0.0.1:8081 closed
> {code}
> Could you kindly advise accordingly, please?
> h5. Conclusion
> Have a way to instruct KIE KieContainer AND KieScanner, to reference just-and-only an internal Nexus repo just and only for the KJar for the rules, without having to proxy Maven central
> Please notice:
> IFF in the custom kie-settings.xml I do remove the mirror definition, the problem WILL be that KIE libraries will try to resolve the {{kiescanner-testandversionissue-rules}} kjar in *both* Maven central and the local repo, and this is not advisable as the rule package name should go straight and just to the internal maven repo.
> h5. Steps to reproduce
> I will attach reproducer containing
> * kiescanner-testandversionissue-rules
> * kiescanner-testandversionissue-client
> * standalone nexus containing just and only repo for the kjar rules without any Maven-central proxy
> you can use the last for standalone test, otherwise you can deploy the rule and reference to another disposable internal Nexus repo by also updating the custom kie-settings.xml in the client app.
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)
More information about the jboss-jira
mailing list