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

    原文作者:爱蛇
    原文地址: https://www.jianshu.com/p/8ef0b5cdcd44
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞