Maven 处理本地sdkjar

项目中,需要引入本地自己的sdk,因为对maven不熟悉,自己查看了许多其他朋友的资料,

下面总结记录下,希望可以帮忙到其他朋友。

maven打包main函数运行的jar方式

1. maven-shade-plugin

2. maven-assembly-plugin

3. maven-onejar-plugin

因为现在项目中有使用Spring,使用第二种方式的话,将会出现spring加载的错误,所以不使用。

现在主要介绍1和3两种。

1. maven-shade-plugin

现在项目中使用的就是 1打成jar文件,具体pom文件如下。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <groupId>com.shiyi.kmtaskgroupId>
    <artifactId>shiyi-kmtaskartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <cxf.version>2.6.1cxf.version>
        <spring.version>3.2.5.RELEASEspring.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.8.2version>
            <scope>testscope>
        dependency>
        <dependency>
            <groupId>org.apache.httpcomponentsgroupId>
            <artifactId>httpclientartifactId>
            <version>4.4.1version>
        dependency>
        <dependency>
            <groupId>org.apache.httpcomponentsgroupId>
            <artifactId>httpcoreartifactId>
            <version>4.4.1version>
        dependency> 
        <dependency>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
            <version>1.2.17version>
        dependency>
        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.2.7version>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>5.1.33version>
        dependency>
        
        <dependency>
            <groupId>com.sun.jnagroupId>
            <artifactId>jnaartifactId>
            <version>3.0.9version>
        dependency>
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-compressartifactId>
            <version>1.9version>
        dependency>
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-collections4artifactId>
            <version>4.0version>
        dependency>
        <dependency>
            <groupId>com.rabbitmqgroupId>
            <artifactId>amqp-clientartifactId>
            <version>3.2.1version>
        dependency>
        <dependency>
            <groupId>commons-iogroupId>
            <artifactId>commons-ioartifactId>
            <version>1.2version>
        dependency>
        <dependency>
            <groupId>commons-cligroupId>
            <artifactId>commons-cliartifactId>
            <version>1.1version>
        dependency>
        <dependency>
            <groupId>dom4jgroupId>
            <artifactId>dom4jartifactId>
            <version>1.6.1version>
        dependency>
        <dependency>
            <groupId>org.apache.cxfgroupId>
            <artifactId>cxf-rt-transports-httpartifactId>
            <version>${cxf.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.cxfgroupId>
            <artifactId>cxf-rt-frontend-jaxwsartifactId>
            <version>${cxf.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-lang3artifactId>
            <version>3.3.2version>
        dependency>

         <dependency>
            <groupId>com.qiniugroupId>
            <artifactId>qiniu-java-sdkartifactId>
            <version>[7.0.0, 7.0.99]version>
        dependency>        
        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>fastjsonartifactId>
            <version>1.1.41version>
        dependency>

         <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatis-springartifactId>
            <version>1.2.2version>
        dependency> 
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>commons-dbcpgroupId>
            <artifactId>commons-dbcpartifactId>
            <version>1.4version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-aopartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-beansartifactId>
            <version>${spring.version}version>
        dependency>        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-expressionartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>commons-poolgroupId>
            <artifactId>commons-poolartifactId>
            <version>1.6version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-coreartifactId>
            <version>${spring.version}version>
        dependency>

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jdbcartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-txartifactId>
            <version>${spring.version}version>
        dependency>
        
        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-apiartifactId>
            <version>1.7.6version>
        dependency>            
        
    dependencies>
    <build>
        <finalName>KMTaskServicefinalName>
        <plugins>
            <plugin>
                <artifactId>maven-shade-pluginartifactId>
                <version>1.4version>
                <executions>
                    <execution>
                        <phase>packagephase>
                        <goals>
                            <goal>shadegoal>
                        goals>
                        <configuration>
                        
                            <filters>
                                    <filter>
                                        <artifact>*:*artifact>
                                        <excludes>
                                            <exclude>META-INF/*.SFexclude>
                                            <exclude>META-INF/*.DSAexclude>
                                            <exclude>META-INF/*.RSAexclude>
                                            <exclude>**/config.propertiesexclude>
                                            <exclude>**/checkdll.dllexclude>
                                            <exclude>**/EnDeCrypinfo.hexclude>
                                            <exclude>**/EnDecryption.dllexclude>
                                            <exclude>**/libcheck.soexclude>
                                            <exclude>**/libEnDecryption.soexclude>
                                            <exclude>**/libmad.soexclude>
                                            <exclude>**/libmad.so.0exclude>
                                            <exclude>**/libmad.so.0.2.1exclude>
                                            <exclude>**/rdck.cfgexclude>
                                        excludes>
                                    filter>
                            filters>
                            
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Main-Class>com.shiyi.autoservice.main.TaskServiceMainMain-Class>
                                        <Build-Number>1.0.2Build-Number>
                                        <X-Compile-Source-JDK>${maven.compile.source}X-Compile-Source-JDK>
                                        <X-Compile-Target-JDK>${maven.compile.target}X-Compile-Target-JDK>
                                    manifestEntries>
                                transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.handlersresource>
                                transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.schemasresource>
                                transformer>
                            transformers>
                    configuration>
                    execution>
                executions>
            plugin>
        plugins>
          
    build>
project>

现在需要加入本地的sdk,

(1)不去本地仓库查找,在自己环境中


                monitor
            monitor
            1.0
            system
            ${project.basedir}/src/main/lib/monitor.sdk.java.jar
        

因为使用的是maven-shade-plugin插件,打包后,你将发现实际上,本地的sdk并没有存在。

原因是因为,使用shade插件的时候,它将直接无视scope为system的jar !!!

所以此方法失败了。

 

(2)将sdk加入本地仓库,然后正常使用,步骤如下:

  1.将sdk加入本地仓库

  mvn install:install-file -Dfile=D:\Users\User\workspace\KMFtpDataClient\src\main\lib\monitor.sdk.java.jar -DgroupId=km -DartifactId=monitor

                  -Dversion=1.0  -Dpackaging=jar

  2.maven中使用

   
                km
            monitor
            1.0
        
 

这个方法可以使用,但是如果其他同事svn引入代码的时候,因为他的本地仓库没有这个jar,将出现错误,所以

最后将它加入自己的中央仓库中。

 

3. maven-onejar-plugin

先在pom中加入


                monitor
            monitor
            1.0
            system
            ${project.basedir}/src/main/lib/monitor.sdk.java.jar
        

然后打包build中代码如下:

<build>
        <finalName>KMTaskServicefinalName>

         <plugins>  
  
            <plugin>  
                <groupId>org.apache.maven.pluginsgroupId>  
                <artifactId>maven-jar-pluginartifactId>  
                <configuration>  
                    <archive>  
                        <manifest>  
                            <mainClass>com.shiyi.autoservice.main.TaskServiceMainmainClass>  
                        manifest>  
                    archive>
                    <excludes>
                        <exclude>META-INF/*.SFexclude>
                        <exclude>META-INF/*.DSAexclude>
                        <exclude>META-INF/*.RSAexclude>
                        <exclude>**/config.propertiesexclude>
                        <exclude>**/checkdll.dllexclude>
                        <exclude>**/EnDeCrypinfo.hexclude>
                        <exclude>**/EnDecryption.dllexclude>
                        <exclude>**/libcheck.soexclude>
                        <exclude>**/libEnDecryption.soexclude>
                        <exclude>**/libmad.soexclude>
                        <exclude>**/libmad.so.0exclude>
                        <exclude>**/libmad.so.0.2.1exclude>
                        <exclude>**/rdck.cfgexclude>
                    excludes>  
                configuration>  
            plugin>  
  
            <plugin>  
                <groupId>com.joliragroupId>  
                <artifactId>onejar-maven-pluginartifactId>  
                <version>1.4.4version>  
                <executions>  
                    <execution>  
                        <configuration>  
                            <attachToBuild>trueattachToBuild>  
                            <classifier>onejarclassifier>
                        configuration>  
                        <goals>  
                            <goal>one-jargoal>  
                        goals>
                    execution>  
                executions>  
            plugin>  
        plugins>  
    build>

以上方法也可以正常运行。至于两种方法的优势,就不是很清楚了。

 

另外,在运行的过称中,出现了大量的重复类。

查看依赖树并没有发现有重复冲突的依赖包(依赖树介绍:http://ian.wang/106.htm)

后来才发现,原来自己本地的sdk中有出现在实际项目中一个的jar,然后并没有以依赖包的形式存在,

而是直接编译在sdk中。

情况大致如下:

本地sdk的pom.xml与项目的pom.xml都有下面依赖存在


            org.apache.httpcomponents
            httpclient
            4.4.1
        

这种情况,依赖树并不能检查出重复,但是编译的时候,却出现了类重复的警告。

 

以上对策:

1.无视它,目前没发现对实际运行有影响

2,注释掉项目中与sdk重复的依赖包(额,自己去找,也是很坑的)

3.修正sdk,最好依赖的包别直接编译进sdk中

 

以上,都是个人的见解,如果有更好的对策或者不对的地方,欢迎各位朋友告知,谢谢。

转载于:https://www.cnblogs.com/tinhou/p/5291974.html

你可能感兴趣的:(Maven 处理本地sdkjar)