美文网首页
maven-jar-plugin插件对scope="system

maven-jar-plugin插件对scope="system

作者: 爱蛇 | 来源:发表于2018-01-16 17:26 被阅读0次

    在使用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

    相关文章

      网友评论

          本文标题:maven-jar-plugin插件对scope="system

          本文链接:https://www.haomeiwen.com/subject/kuteoxtx.html