2016-08-08 29 views
0

我想将drools工作台6.4.0.Final与我自己的应用程序集成。KieScanner无法自动获取最新版本!

下面这是主类:

package com.example; 
import com.idss.poc.CouponFact; 
import com.idss.poc.Result; 
import org.codehaus.plexus.util.FileUtils; 
import org.drools.compiler.kie.builder.impl.KieServicesImpl; 
import org.drools.compiler.kproject.ReleaseIdImpl; 
import org.drools.core.io.impl.UrlResource; 
import org.kie.api.KieServices; 
import org.kie.api.builder.KieModule; 
import org.kie.api.builder.KieRepository; 
import org.kie.api.builder.KieScanner; 
import org.kie.api.builder.ReleaseId; 
import org.kie.api.runtime.KieContainer; 
import org.kie.api.runtime.StatelessKieSession; 
import org.kie.scanner.KieScannerFactoryServiceImpl; 

import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 


public class FunctionExample { 
    public static void main(String[] args) { 
     KieServices ks = KieServices.Factory.get(); 
     ReleaseId releaseId = ks.newReleaseId("com.test", "poc", "LATEST"); 

     KieContainer kContainer = ks.newKieContainer(releaseId); 
     KieScanner kieScanner = ks.newKieScanner(kContainer); 

     kieScanner.start(10000L); 

     Scanner scanner = new Scanner(System.in); 

     while (true) { 
      kieScanner.scanNow(); 
      String line = scanner.nextLine(); 
      runRule(kContainer); 
     } 
    } 

    private static void runRule(KieContainer kieKontainer) { 
     StatelessKieSession kSession =kieKontainer.newStatelessKieSession("ks"); 
     Result result = new Result(); 
     List<String> list = new ArrayList<String>(); 
     result.setRules(list); 

     kSession.setGlobal("result", result); 

     CouponFact cf = new CouponFact(); 
     cf.setPhoneCount(2); 
     cf.setUserCount(2); 
     cf.setDeviceCount(2); 
     cf.setIp10mCount(10); 
     cf.setIpDayCount(10); 
     kSession.execute(cf); 

     System.out.println(result.getScore() + "," + result.getRules()); 
    } 
} 

这下面使用自己的应用我的settings.xml。

<?xml version="1.0" encoding="UTF-8"?> 
<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>~/.m2/repository</localRepository> 
    <pluginGroups> 
    </pluginGroups> 
    <proxies> 
    </proxies> 
    <servers> 
    <server> 
     <id>guvnor-m2-repo</id> 
     <username>workbench</username> 
     <password>workbench!</password> 
     <configuration> 
     <wagonProvider>httpclient</wagonProvider> 
     <httpConfiguration> 
      <all> 
      <usePreemptive>true</usePreemptive> 
      </all> 
     </httpConfiguration> 
     </configuration> 
    </server> 
    <server> 
     <id>mymirror</id> 
     <username>workbench</username> 
     <password>workbench!</password> 
     <configuration> 
     <wagonProvider>httpclient</wagonProvider> 
     <httpConfiguration> 
      <all> 
      <usePreemptive>true</usePreemptive> 
      </all> 
     </httpConfiguration> 
     </configuration> 
    </server> 
    </servers> 
    <mirrors> 
    <mirror> 
     <id>mymirror</id> 
     <url>http://10.10.10.57:8080/kie-wb/maven2</url> 
     <mirrorOf>*</mirrorOf> 
     <layout>default</layout> 
    </mirror> 
    </mirrors> 
    <profiles> 
    <profile> 
     <id>guvnor-m2-repo</id> 
     <activation> 
     <activeByDefault>true</activeByDefault> 
     </activation> 
     <repositories> 
     <repository> 
      <id>guvnor-m2-repo</id> 
      <name>Guvnor M2 Repo</name> 
      <url>http://10.10.10.57:8080/kie-wb/maven2</url> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
      <updatePolicy>always</updatePolicy> 
     </repository> 
     </repositories> 
    </profile> 
    </profiles> 
    <activeProfiles> 
    <activeProfile>guvnor-m2-repo</activeProfile> 
    </activeProfiles> 
</settings> 

当我更新我的滴料的工作台治,提升我回购的版本,但我的应用程序不会自动让我回购的最新版本。 我得到的日志是这样的:

11:50:24.158 [Timer-0] DEBUG org.kie.scanner.embedder.MavenEmbedderUtils - Not in OSGi: using plexus based maven parser 
11:50:24.212 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/pinter/Desktop/RiskGuard/~/.m2/repository 
11:50:24.212 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/pinter/Desktop/RiskGuard/~/.m2/repository 
11:50:24.213 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for guvnor-m2-repo (http://10.10.10.57:8080/kie-wb/maven2). 
11:50:24.215 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for guvnor-m2-repo (http://10.10.10.57:8080/kie-wb/maven2). 
11:50:24.215 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for central (https://repo.maven.apache.org/maven2). 
11:50:24.216 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultDependencyCollector - Dependency collection stats: {ConflictMarker.analyzeTime=0, ConflictMarker.markTime=0, ConflictMarker.nodeCount=1, ConflictIdSorter.graphTime=0, ConflictIdSorter.topsortTime=0, ConflictIdSorter.conflictIdCount=0, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=0, ConflictResolver.conflictItemCount=0, DefaultDependencyCollector.collectTime=0, DefaultDependencyCollector.transformTime=0} 
11:50:24.217 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for ~/.m2/repository 
11:50:24.217 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultUpdateCheckManager - Skipped remote request for com.idss:poc/maven-metadata.xml, locally cached metadata up-to-date. 

谁能帮我弄明白?谢谢!

+0

升级版本的回购后,你“建立和部署”你的项目? –

+0

当然,我做了“构建和部署”我的项目。但它不起作用,我得到了旧版本。 – PINTER

回答

0

我假设你把“最新”,以获取您的KJAR的最新快照版本。

如果是这样的话,我认为您需要设置快照更新策略,使其大于默认值“每日”。此外,由于updatePolicy标记没有正确嵌套,因此您的Maven设置文件中似乎有错误。我建议你尝试这样的事:

<profiles> 
    <profile> 
     <id>guvnor-m2-repo</id> 
     <activation> 
     <activeByDefault>true</activeByDefault> 
     </activation> 
     <repositories> 
     <repository> 
      <id>guvnor-m2-repo</id> 
      <name>Guvnor M2 Repo</name> 
      <url>http://10.10.10.57:8080/kie-wb/maven2</url> 

     <releases> 
     <enabled>false</enabled> 
     <updatePolicy>always</updatePolicy> 
     </releases> 
     <snapshots> 
     <enabled>true</enabled> 
     <updatePolicy>always</updatePolicy> 
     </snapshots> 

     </repository> 
     </repositories> 
    </profile> 
    </profiles> 

编号:https://maven.apache.org/settings.html#Repositories

+0

它不起作用。 – PINTER

+0

从现在开始起作用。 – PINTER

1

如果您在版本号字段在你的应用程序中使用LATESTKieScanner尝试匹配的jar的版本号可以在本地在kie-workbench提供版本号为jar的仓库。如果两个版本都相同,则它不会从远程存储库获取jar并使用本地存储库中的jar。每次“构建和部署”时,都要增加版本号以使更改反映到应用程序端。

如果每次部署时增加版本号对您而言都是太多工作,我会建议在您的版本号中使用-SNAPSHOT。快照版本总是从远程存储库获取,即使本地存储库中有相同的版本。 <version>-SNAPSHOT应仅用于开发目的。

0

感谢@tarilabs@Naved Alam,你的答案只是帮助我。 我读了Drools的文件,它告诉我:

的KieScanner只会皮卡更改已部署的罐子如果使用快照,版本范围,最新的,或松开设置。固定版本不会在运行时自动更新。

所以,我修改了我的工作台项目,并设置版本号2.0.0-SNAPSHOT,并改变我的代码

ReleaseId releaseId = ks.newReleaseId("com.test", "poc", "LATEST"); 

ReleaseId releaseId = ks.newReleaseId("com.test", "poc", "2.0.0-SNAPSHOT"); 

由于到目前为止,它再次正常工作。该方案显示日志是这样的:

11:50:24.158 [Timer-0] DEBUG org.kie.scanner.embedder.MavenEmbedderUtils - Not in OSGi: using plexus based maven parser 
11:50:24.212 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/pinter/Desktop/RiskGuard/~/.m2/repository 
11:50:24.212 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/pinter/Desktop/RiskGuard/~/.m2/repository 
11:50:24.213 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for guvnor-m2-repo (http://10.10.10.57:8080/kie-wb/maven2). 
11:50:24.215 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for guvnor-m2-repo (http://10.10.10.57:8080/kie-wb/maven2). 
11:50:24.215 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for central (https://repo.maven.apache.org/maven2). 
11:50:24.216 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultDependencyCollector - Dependency collection stats: {ConflictMarker.analyzeTime=0, ConflictMarker.markTime=0, ConflictMarker.nodeCount=1, ConflictIdSorter.graphTime=0, ConflictIdSorter.topsortTime=0, ConflictIdSorter.conflictIdCount=0, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=0, ConflictResolver.conflictItemCount=0, DefaultDependencyCollector.collectTime=0, DefaultDependencyCollector.transformTime=0} 
11:50:24.217 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for ~/.m2/repository 
11:50:24.217 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultUpdateCheckManager - Skipped remote request for com.idss:poc/maven-metadata.xml, locally cached metadata up-to-date. 

正如我们看到的,中心资源库https://repo.maven.apache.org/maven2我的自定义远程仓库http://10.10.10.57:8080/kie-wb/maven2具有覆盖。

我试图改变我的settings.xml,

<mirrors> 
    <mirror> 
     <id>mymirror</id> 
     <url>http://10.10.10.57:8080/kie-wb/maven2</url> 
     <mirrorOf>guvnor-m2-repo</mirrorOf> 
     <layout>default</layout> 
    </mirror> 
</mirrors> 

这只是工作的罚款!