maven-jar-plugin插件對scope="system"依賴的處理

在使用dubbo 時,基本都需要通過maven-jar-plugin來生成jar包文件,其中內容包括
META-INF/MAINIFEST.MF程序主文件
文件里有一個屬性用來指定classpath 的,叫 Class-Path
maven-jar-plugin會將所有maven依賴放到這里來

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Build-Jdk: 1.8.0_91
Main-Class: com.alibaba.dubbo.container.Main
Built-Time: 2018-01-16T08:15:14Z
XXXX: 1
Class-Path: . lib/cn-jufuns-ien-api-1.0.0.jar lib/zkclient-0.1.jar lib
 /zookeeper-3.4.6.jar lib/jline-0.9.94.jar 

但唯獨是那些 獨立jar包的maven依賴沒有加進來:

<dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-signature</artifactId>
            <version>0.0.1</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/lib/alipay-sdk-jar.jar</systemPath>
</dependency>

例如做支付寶開發的時候需要用到的alipay-sdk.java.jar ,
因為沒有放到maven 倉庫所以不會寫入到MAINIFEST.MF文件里的Class-Path。

解決方法一

將jar文件放到 maven 私庫里,然后就可以不用使用<scope>syetem</scope>來觸發這個bug

解決方法二

在maven-jar-plugin 里配置Class-Path,

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>

            <version>2.3.1</version>
            <configuration>
                <archive>
                    <!-- 生成的jar中,不要包含pom.xml和pom.properties這兩個文件 -->
                    <addMavenDescriptor>false</addMavenDescriptor>
                    <manifest>
                        <mainClass>com.alibaba.dubbo.container.Main</mainClass>
                        <useUniqueVersions>false</useUniqueVersions>
                         <addClasspath>true</addClasspath>
                         <classpathPrefix>lib/</classpathPrefix>
                     </manifest>
                     <manifestEntries>
                        <Class-Path>. lib/alipay-sdk.java.jar</Class-Path>
                        <XXXX>111</XXXX>
                     </manifestEntries>
                </archive>
            </configuration>
</plugin>

請留意這個區域的配置,將本地jiar文件寫入Class-Path:

<manifestEntries>
        <Class-Path>. lib/alipay-sdk.java.jar</Class-Path>
</manifestEntries>

配置了這個以后,maven-jar-plugin 會將其他maven 依賴的jar文件在這個基礎上追加。
詳細manifestEntries配置可以參考:
http://maven.apache.org/shared/maven-archiver/examples/manifestEntries.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。