美文网首页
maven实战-源码和依赖分离

maven实战-源码和依赖分离

作者: coderchenhao | 来源:发表于2020-08-29 23:25 被阅读0次

    源码和依赖分离

    博主在接触一个新项目的时候,发现这个项目打包出来的jar包非常的小,这样在替换测试环境的jar包时就会显得十分有优势。通过查看pom文件得知,原来这个项目用到了maven-dependency-plugin和maven-jar-plugin俩个maven插件。

    实现逻辑

    我们的目的是实现源码和依赖分离,也就是在打包的时候需要将源码和依赖分开,这时候我们需要先借助maven-dependency-plugin插件在打包前将依赖复制到一个路径a,然后打包的时候指定classpath就是我们之前复制的路径a。

    maven-dependency-plugin

    maven-dependency-plugin插件跟我们项目中的依赖有关,我们可以通过这个插件来分析依赖关系,拷贝依赖关系,解压依赖文件。

    详细配置

    phase是maven生命周期中的某个时机,这里是prepare-package,也就是准备打包的时候。goal就是插件的目标,也就是我们希望插件来帮我们完成什么事情。maven-dependency-plugin的goal非常多,博主这里使用的是copy-dependencies,插件的详细配置如下所示:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-dependencies</id>
                <!---时机为准备打包->
                <phase>prepare-package</phase>
                <goals>
                    <!---目标根据pom文件来拷贝依赖文件->
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <!--输出路径-->
                    <outputDirectory>${project.build.directory}/bin/lib</outputDirectory>
                    <overWriteReleases>false</overWriteReleases>
                    <overWriteSnapshots>false</overWriteSnapshots>
                    <!--新文件才会覆盖-->
                    <overWriteIfNewer>true</overWriteIfNewer>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    maven-jar-plugin

    maven-jar-plugins是打用来打jar包的插件,我们可以设定 META-INF/MAINFEST .MF文件的参数,比如mainClass主类的位置,是否添加classpath路径,classpath路径的前缀等属性。

    详细配置

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <!--添加外部jar包到classpath-->
                    <addClasspath>true</addClasspath>
                    <!--classpath路径前缀-->
                    <classpathPrefix>lib/</classpathPrefix>
                    <!--主类的全类名-->
                    <mainClass>com.Application</mainClass>
                </manifest>
            </archive>
            <!--jar包输出路径为项目构建路径target下的bin目录-->
            <outputDirectory>
                    ${project.build.directory}/bin
            </outputDirectory>
        </configuration>
    </plugin>
    

    查看实际效果

    从下图可以知道,我们的依赖跟源码已经成功分离开来。

    实际效果

    <span id="wechatGzh">博主微信公众号</span>

    <img src="https://gitee.com/chenhaogit/blogimages/raw/master/xsj/wzgzh-8cm.jpg" style="float:right"/>

    相关文章

      网友评论

          本文标题:maven实战-源码和依赖分离

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