zoukankan      html  css  js  c++  java
  • maven 打jar包依赖问题

    共有3个插件maven-shade-plugin,maven-jar-plugin+dependency,maven-assembly-plugin

     https://blog.csdn.net/fuck487/article/details/77503925

    1.shade直接打包,包含所有依赖项

    https://blog.csdn.net/bljbljbljbljblj/article/details/52484595

    <plugin>
    
        <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.7.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>:</artifact> -》<artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <transformers>
                                <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.xxx.xxx</mainClass>
                                </transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.handlers</resource>
                                </transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.schemas</resource>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    

      

    1+ spring boot也是内置依赖 

    2.jar不含依赖项

    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.3</version>
    <configuration>
    <source>1.8</source>
    <target>1.8</target>
    </configuration>
    </plugin>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
    <archive>
    <manifest>
    <addClasspath>true</addClasspath>
    <classpathPrefix>lib/</classpathPrefix>
    <mainClass>com.newlandframework.rpc.boot.RpcServerStarter</mainClass>
    </manifest>
    </archive>
    </configuration>
    </plugin>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
    <execution>
    <id>copy</id>
    <phase>package</phase>
    <goals>
    <goal>copy-dependencies</goal>
    </goals>
    <configuration>
    <outputDirectory>
    ${project.build.directory}/lib
    </outputDirectory>
    </configuration>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </build>

    <phase>prepare-package</phase>可将jar依赖包一起打入,不过会有问题,它会把依赖jar包打进去,在里面开一个lib目录塞进去,而不是像assembly和shade一样以class的形式打进jar包 2019.12.5


    3.assembly
    内置依赖:
    https://blog.csdn.net/bljbljbljbljblj/article/details/52484595
    <plugin>
    
    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.2-beta-5</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.xxx.xxx</mainClass>   包含main方法的类
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef> 将依赖包一起打包
                        </descriptorRefs>
                    </configuration>
                    <executions>
                        <execution>                        执行器 mvn assembly:assembly
                            <id>make-assembly</id>         是个名字,可以任意
                            <phase>package</phase>         绑定到package生命周期阶段上
                            <goals>
                                <goal>single</goal>        只运行一次
                            </goals>
                        </execution>
                    </executions>
        </plugin>
    

      

    至于我为什么最终会选择maven-shade-plugin这种方式,是因为之前在使用maven-assembly-plugin的时候,在本地运行没有任何问题,而当我们放到linux上运行jar包的时候,就会出现错误Unable to locate Spring NamespaceHandler for XML schema namespace[http://www.springframework.org/schema/context]等等之类的错误,错误原因大概是因为由于项目中用到了spring框架,而当我们在项目中使用spring的多个内容的时候,包含了相同名字的文件,通过看网上的解决办法,发现maven-shade-plugin这个插件的打jar包方式可以解决该问题,上述pom.xml上的<transformer>标签中的内容就是解决该问题的!


    参考:
    http://blog.51cto.com/alex233/1885759
    http://www.cnblogs.com/dzblog/p/6913809.html
    https://blog.csdn.net/bljbljbljbljblj/article/details/52484595
  • 相关阅读:
    近期前端中的 一些常见的面试题
    一道前端学习题
    前端程序员容易忽视的一些基础知识
    web前端工程师入门须知
    Web前端知识体系精简
    面试分享:一年经验初探阿里巴巴前端社招
    抽象类、抽象函数/抽象方法详解
    C#语法-虚方法详解 Virtual 虚函数
    面向对象语言:继承关系教程
    C#动态创建Xml-LinQ方式
  • 原文地址:https://www.cnblogs.com/silyvin/p/9354287.html
Copyright © 2011-2022 走看看