likes
comments
collection
share

maven打完jar包之后将jar包放到指定位置总结

作者站长头像
站长
· 阅读数 30

方式一:通过maven-jar-plugin指定outputDirectory输出路径

可以排除某些配置文件,没有文件夹的话会自动创建

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <!– 指定打包的jar包输出路径 相对路径、绝对路径都可以 –>
        <outputDirectory>D:\test</outputDirectory>
        <!–不打入jar包的文件类型或者路径 –>
        <excludes>
            <exclude>**/*.properties</exclude>
            <exclude>**/*.xml</exclude>
            <exclude>**/*.yml</exclude>
            <exclude>static/**</exclude>
            <exclude>templates/**</exclude>
        </excludes>
    </configuration>
</plugin>

方式二:通过maven-resources-plugin指定outputDirectory输出路径

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
        <execution>
            <id>project1</id>
            <phase>package</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <encoding>UTF-8</encoding>
                <!–打成jar包后复制到的路径 相对路径 绝对路径都可以–>
                <outputDirectory>D:\文件夹1</outputDirectory>
                <resources>
                   <resource>
                       <!–项目中的路径 –>
                       <directory>src/main/resources/</directory>
                   </resource>   
                </resources>                                           
            </configuration>
        </execution>
        <!–可配置多个提取复制路径只需要 id标签 名字不一样即可 –>
        <execution>
            <id>project2</id>
            <phase>package</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <encoding>UTF-8</encoding>
                <outputDirectory>D:\文件夹2</outputDirectory>
                <resources>
                    <resource>
                        <directory>target</directory>
                    </resource>
                </resources>
            </configuration>
        </execution>    
    </executions>
</plugin>

方式三:通过maven-antrun-plugin复制jar包

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>install</id>
            <phase>install</phase>
            <configuration>
                <target>
                    <echo message=”*******************install*******************” />
                    <mkdir dir=”${basedir}/target/classes” />
                    <copy todir=”../target/commons” overwrite=”true”>
                        <fileset dir=”${project.build.directory}”
erroronmissingdir=”false”>
                            <include name=”*.jar” />
                        </fileset>                            
                    </copy>
                    <move file=”${project.build.directory}/xxxxxxx.jar”
tofile=”${project.build.directory}/xxx.jar” />
                </target>
            </configuration>
            <goals>
                <goal>run</goal>             
            </goals>
        </execution>
        
        <execution>
            <id>clean</id>
            <phase>clean</phase>
            <configuration>
                <target>
                    <echo message=”*******************clean*******************” />
                    <delete dir=”target” />
                    <mkdir dir=”${basedir}/target/classes” />
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

<execution>是可执行命令,可以修改maven的命令执行过程,下面的两个execution是修改了install和clean;

<echo>是打印命令;

<mkdir>是创建文件夹命令;(文件夹里面没有东西时好像不会创建出来)

<copy>是复制命令,其中todir是目标文件夹,overwrite是覆盖旧文件,<fileset dir=”xxxx”>是源文件,<include>是包含jar包;

<move>是移动文件或者修改名称命令

<delete>是删除命令;

${basedir} 指的是 项目根路径

${project.build.directory} 指的是 target所在目录

${project.build.finalName} 指的是 jar包前缀名

方式四:通过maven-antrun-plugin嵌入build.xml文件

build.xml放到项目根路径下,使用<ant antfile=”${basedir}/build.xml”>嵌入build.xml文件即可。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <!-- 插件版本 -->
    <version>1.8</version>
    <executions>
        <execution>
            <id>install</id>
            <phase>install</phase>
            <configuration>
                <target>
                    <property name=”compile_classpath” refid=”maven.compile.classpath” />
                    <property name=”runtime_classpath” refid=”maven.runtime.classpath” />
                    <property name=”test_classpath” refid=”maven.test.classpath” />
                    <property name=”plugin_classpath” refid=”maven.plugin.classpath” />
                    <ant antfile=”${basedir}/build.xml”>
                        <target name=”test” />
                    </ant>              
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

方式五:使用distributionManagement设置存放路径

这种方式没有通过插件,而是直接配置distributionManagement 使用deploy命令可以部署到目标文件夹,没有文件夹的话会自动创建!

<distributionManagement>
    <repository>
        <id>localRepository</id>
        <!-- 文件地址 相对地址 绝对地址 -->
        <url>file:D:/testRepository</url>
    </repository>
</distributionManagement>

扩展:使用maven-dependency-plugin 插件将依赖包导出到指定文件夹 这种方式是将依赖包输出到指定路径

maven-dependency-plugin插件将项目代码与依赖分开打包

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <!-- 指定输出路径 相对地址、绝对地址都可以-->
                <outputDirectory>D:\test2</outputDirectory>    
                <!-- exclusion标签 排除传递依赖 上面的项目中,spring-boot-starter-web中的所有依赖将不会被提前,一般情况需要设置为false-->
                <exclusion>false</exclusion>
                <!-- stripVersion标签 提取的依赖jar文件是否去掉版本号-->
                <stripVersion>false</stripVersion>
                <!-- includeScope标签 用来指定哪些依赖范围的包应该被包含在最终的包中 -->
                <includeScope>runtime</includeScope>
            </configuration>
        </execution>
    </executions>
</plugin>

includeScope标签属性

includeScope标签 用来指定哪些依赖范围的包应该被包含在最终的包中

1、compile:编译依赖范围,默认使用该范围。被依赖项在编译和运行时期都会使用。

2、test:测试依赖范围。被依赖项只在测试编译和运行期间使用。

3、runtime:运行时依赖范围。被依赖项仅在运行期间使用。

4、system:系统依赖范围。该依赖与三方库相似,需要显式提供包含库的路径。

5、 provided:已提供依赖范围。与compile类似,但容器或者JDK已提供该依赖,不需要在打包时包含。

转载自:https://juejin.cn/post/7387380647269875738
评论
请登录