1. 程式人生 > >maven-shade-plugin

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>