utilizzando Drools 6 architettura Maven completamente offline

sto usando Drools 6.0.1 e facendo uso della nuova architettura basata su Maven per implementare le mie regole.

il POM del progetto sembra mostrato alla fine di questo post.

avvio il progetto con il parametro -Dkie.maven.settings.custom="X:\\maven2\\settings.xml" per usare un repository Maven separato per Drools. questo settings.xml è mostrato anche di seguito.

quando eseguo il progetto (.java mostrato alla fine), il kernel interno maven, cioè Aether, aggiunge ancora il repository centrale alla sua configurazione interna. questo è male perché, ovviamente, il sistema dovrebbe funzionare offline.

l’uscita di esecuzione è quindi:

DEBUG [main] (KieRepositoryImpl.java:91) - KieModule Lookup. ReleaseId de.itm.droolstest:x123:1.0.1 was not in cache, checking classpath
DEBUG [main] (KieRepositoryImpl.java:97) - KieModule Lookup. ReleaseId de.itm.droolstest:x123:1.0.1 was not in cache, checking maven repository
DEBUG [main] (Logs.java:390) - Add publisher: com.google.inject.internal.InjectorImpl@784eb2c

-----[explicit bindings]-------------------------------------------------------
0. ProviderInstanceBinding{key=Key[type=com.google.inject.Injector, annotation=[none]], source=[unknown source], scope=Scopes.NO_SCOPE, provider=Provider<Injector>}
1. ProviderInstanceBinding{key=Key[type=java.util.logging.Logger, annotation=[none]], source=[unknown source], scope=Scopes.NO_SCOPE, provider=Provider<Logger>}
2. ProviderInstanceBinding{key=Key[type=org.slf4j.Logger, annotation=[none]], source=[unknown source], scope=Scopes.NO_SCOPE, provider=Provider<org.slf4j.Logger>}
3. InstanceBinding{key=Key[type=com.google.inject.Stage, annotation=[none]], source=[unknown source], instance=DEVELOPMENT}
[...] (many more lines removed for brevity)
202. ConstructorBinding{key=Key[type=org.apache.maven.lifecycle.internal.LifecycleDebugLogger, annotation=[none]], source=ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]], scope=Scopes.SINGLETON}
-----[implicit bindings]-------------------------------------------------------
-------------------------------------------------------------------------------

 INFO [pool-1-thread-1] (NettyAsyncHttpProvider.java:199) - Number of application's worked threads is 8
DEBUG [pool-1-thread-1] (NettyAsyncHttpProvider.java:948) - 
Non cached request 
DefaultHttpRequest(chunked: false)
HEAD /nexus/content/groups/public/de/droolstest/x123/1.0.1/x123-1.0.1.jar HTTP/1.1
Host: nexus.my-domain.de:8081
Pragma: no-cache
Cache-Control: no-cache, no-store
Accept-Encoding: gzip
Connection: keep-alive
Accept: */*
User-Agent: Aether

using Channel 
[id: 0x0fd71519]

DEBUG [New I/O client worker #1-1] (NettyAsyncHttpProvider.java:1048) - 

Request DefaultHttpRequest(chunked: false)
HEAD /nexus/content/groups/public/de/itm/droolstest/x123/1.0.1/x123-1.0.1.jar HTTP/1.1
Host: nexus.my-domain.de:8081
Pragma: no-cache
Cache-Control: no-cache, no-store
Accept-Encoding: gzip
Connection: keep-alive
Accept: */*
User-Agent: Aether

Response DefaultHttpResponse(chunked: false)
HTTP/1.1 404 The server has not found anything matching the request URI
Date: Tue, 11 Mar 2014 09:42:48 GMT
Set-Cookie: rememberMe=deleteMe; Path=/nexus; Max-Age=0; Expires=Mon, 10-Mar-2014 09:42:48 GMT
Date: Tue, 11 Mar 2014 09:42:48 GMT
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Server: Noelios-Restlet-Engine/1.1.6-SONATYPE-5348-V4
Content-Type: text/html;charset=ISO-8859-1
Cache-Control: must-revalidate,no-cache,no-store
Content-Length: 1533

DEBUG [New I/O client worker #1-1] (NettyConnectionsPool.java:147) - Adding uri: http://nexus.my-domain.de:8081 for channel [id: 0x0fd71519, /192.168.100.113:51272 => nexus.my-domain.de/192.168.100.145:8081]
Exception in thread "main" Exception in thread "FileRepositoryConnector-1" java.lang.IllegalArgumentException: number of transferred bytes cannot be negative
    at org.sonatype.aether.util.listener.DefaultTransferEvent.setTransferredBytes(DefaultTransferEvent.java:123)
    at org.sonatype.aether.connector.file.FileRepositoryWorker.run(FileRepositoryWorker.java:299)
    at org.sonatype.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:60)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
java.lang.IllegalArgumentException: number of transferred bytes cannot be negative
    at org.sonatype.aether.util.listener.DefaultTransferEvent.setTransferredBytes(DefaultTransferEvent.java:123)
    at org.sonatype.aether.connector.file.FileRepositoryWorker.run(FileRepositoryWorker.java:299)
    at org.sonatype.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:60)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

(il manufatto è, naturalmente, in quello x: / maven2 repository)

come si può vedere, il sistema cerca di connettersi al nostro Nexus, che è configurato nel globale settings.xml, quello utilizzato per la costruzione del progetto.

così, la mia domanda (s) sarebbe: * come posso configurare Drools per eseguire il suo Maven completamente offline * Come posso evitare Drools ‘Maven di prendere il progetto pom.xml come configurazione? che pom.xml dovrebbe essere utilizzato solo quando si costruisce il progetto, non in fase di esecuzione! può essere prevenuta?

qualsiasi aiuto è apprezzato!


e ora i file di configurazione.

progetto 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.demo</groupId>
    <artifactId>kieTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.drools</groupId>
                <artifactId>drools-bom</artifactId>
                <type>pom</type>
                <version>6.0.1.Final</version>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-ci</artifactId>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
</project>

il x:\maven2\settings.xml (quello per i drooli):

<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:/maven2/repository</localRepository>
    <interactiveMode>false</interactiveMode>
    <offline>true</offline>

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

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

la classe Java attuale: pacchetto kieTest;

import org.kie.api.*;

public class MainKieTest {

    public static void main(String[] args) {
        KieServices ks = KieServices.Factory.get();
        KieRepository repository = ks.getRepository();
        ReleaseId releaseId = ks.newReleaseId("de.test.droolstest", "x123", "1.0.1");
        KieContainer kieContainer = ks.newKieContainer(releaseId);
    }
}

EN From: Using Drools 6 Maven architecture completely offline

More similar articles:

7 Comments

  1. è normale per Nexus di contenere gli artefatti del rilascio, non solo le dipendenze che si usano durante le build. tuttavia, è possibile bloccare il suo uso. presumibilmente il vostro ~ / .m2 / .settings.xml è stato configurato per andare al vostro repository Nexus invece di centrale, quando si cerca di artefatti. simile al modo in cui si potrebbe configurare Maven per andare al proxy Nexus invece di centrale, è sufficiente modificare ~ / .m2 / .settings per disabilitare i download di rilascio e snapshot artefatti da centrale.

    <repositories>
      <repository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
          <enabled>false</enabled>
        </releases>
        <snapshots>
          <enabled>false</enabled>
        </snapshots>
      </repository>
    </repositories>
    1. ma non voglio utilizzare alcun repository esterno, può essere centrale o il nostro Nexus, per essere utilizzato dal Drools-Maven. e sopra frammento è già nel settings.xml utilizzato per Drools.

    2. sì. ho solo che settings.xml su un sistema appena installato, non maven installato – il programma cerca ancora di contattare repo1.maven.org.

    3. si potrebbe semplicemente cambiare l’URL per centrale a localhost se non si desidera che la registrazione di qualsiasi cosa sulla vostra installazione Nexus.

    4. quella sarebbe una buona idea, proverò quello fuori. ma nel frattempo ho trovato il problema di origine per il mio problema, vedere la mia risposta.

  2. ho trovato il problema di fondo: bug No. 1065984 nella Bugzilla di RedHat. si tratta di maven incorporato non rispettando le impostazioni configurate in quanto esplicito settings.xml. il bugfix è stato rilasciato in Drools 6.1.0.Beta1 che è stato pubblicato nei repository Maven il giorno venerdì – è per questo che non ho trovato fino a poco.

    con la nuova versione, l’aspetto offline funziona molto meglio, almeno non si connette a un server remoto proprio come questo.

    ancora, c’è il problema, che l’efficace configurazione / pom Maven tiene conto del POM che viene utilizzato per il progetto Drools è in esecuzione all’interno. questo è male, perché non voglio mettere tutte queste dipendenze nel Drools-Maven-Repository. ma questo è per un’altra domanda.

Leave a Reply

Your email address will not be published. Required fields are marked *