maven-shade-plugin
最近,用規則引擎(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>