最近,用规则引擎(drools)的封装了一个jar包,给别人使用。用的是maven-assembly-plugin打的包,可以把多个jar包里的class 给打成一个jar,感觉还是满好用的,但是打包成功后,发现报空指针错误,
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NullPointerException
at org.kie.internal.utils.KieHelper.<init>(KieHelper.java:43)
at com.topnet.ruleengine.RuleCall.geKieSession(RuleCall.java:145)
at com.topnet.ruleengine.RuleCall.call(RuleCall.java:43)
at M.main(M.java:17)
感觉少打哪个个东西了,于是把drools的包一个一个copy到项目里,挨个试验,发现drools-compiler-7.24.0.Final.jar是OK的,最终定位是kie.conf除了问题。后来去jar里一个,kie.conf是存在有,对比了一下文件内容,发现内容不对,然后就发现了多个kie.conf,判断是文件覆盖出了问题,知道问题就好办,在网上找了一下,发现maven-shade-plugin是个好东西,可以把多个文件内容合并。然后问题就解决了。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/kie.conf</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.topnet.ruleengine.RuleCall</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>