美文网首页
maven分离依赖打包

maven分离依赖打包

作者: 岁月静好忄 | 来源:发表于2020-01-08 16:49 被阅读0次

    使用maven-compiler-plugin和maven-assembly-plugin两个插件进行分离依赖打包可执行jar包

    pom.xml文件中配置build

    <build>
        <finalName>打包后的包名</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <!-- 解决打包时找不到jdk下面的rt依赖 -->
                    <compilerArguments>
                        <verbose />
                        <bootclasspath>${java.home}/lib/rt.jar</bootclasspath>
                    </compilerArguments>
                </configuration>
            </plugin>
            
            <!-- 可运行的jar包内的文件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>可运行jar包的入口类</mainClass>
                            <!-- 要分离依赖此处必须填true -->
                            <addClasspath>true</addClasspath>
                            <!-- 指定外部jar所在的路径 -->
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <!-- 拼接MANIFEST.MF文件中Class-Path的路径 -->
                            <Class-Path>./</Class-Path>
                        </manifestEntries>
                    </archive>
                    <excludes>
                        <!-- 不包括那个文件夹下的文件 -->
                        <exclude>config/**</exclude>
                    </excludes>
                </configuration>
            </plugin>
            
            <!-- 依赖的外部配置 -->
            <plugin>  
                <artifactId>maven-assembly-plugin</artifactId>  
                <configuration>  
                    <appendAssemblyId>false</appendAssemblyId>  
                    <!-- 配置文件存放地址 -->
                    <descriptors>  
                        <descriptor>src/main/resources/assembly.xml</descriptor>  
                    </descriptors>  
                </configuration>  
                <executions>  
                    <!--执行器 mvn assembly:assembly-->
                    <execution>  
                        <id>make-assembly</id>  <!--名字任意 -->
                        <phase>package</phase>  <!-- 绑定到package生命周期阶段上 -->
                        <goals>  
                            <goal>single</goal>  <!-- 该打包任务只运行一次 -->
                        </goals>  
                    </execution>  
                </executions>  
            </plugin>  
        </plugins>
    </build>
    
    

    assembly.xml文件配置

    <?xml version="1.0" encoding="UTF-8"?>
    <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
        
        <!-- id 标识符,添加到生成文件名称的后缀符。如果指定 id 的话(这里指定的是项目的版本),目标文件则是 ${artifactId}-${id}.jar。【如yigo-core.jar】 -->
        <id>package</id>
        <formats>
            <!-- 指定打包格式,支持的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war,可以同时指定多个打包格式 -->
            <format>tar</format>
        </formats>
        <!-- 指定打的包是否包含打包层目录(比如finalName是yigo-core,当值为true,所有文件被放在包内的yigo-core目录下,否则直接放在包的根目录下)-->
        <includeBaseDirectory>false</includeBaseDirectory>
        
        <!-- 指定要包含的文件集,可以定义多个fileSet -->
        <fileSets>
            <fileSet>
                <directory>src/main/resources</directory><!-- 指定归档文件(要打的jar包)要包含的目录(下的文件及文件夹) -->
                <outputDirectory>/</outputDirectory><!-- 指定要将当前目录(<directory>标签中的目录放在归档文件(要打的jar包)/目录下) -->
                <excludes>
                    <exclude>cmd/**</exclude>
                </excludes>
            </fileSet>
            <fileSet>
                <directory>${project.build.directory}</directory>
                <outputDirectory>/</outputDirectory>
                <includes>
                    <include>*.jar</include>
                </includes>
            </fileSet>
        </fileSets>
        <!-- 指定将工程依赖的包打到包里的指定目录下 -->
        <dependencySets>
            <dependencySet>
                <useProjectArtifact>true</useProjectArtifact> <!-- 指定打包时是否包含工程自身生成的jar包 -->
                <outputDirectory>lib</outputDirectory><!-- 指定将这些依赖包打到包里lib目录下 -->
                <scope>runtime</scope><!-- 用于管理依赖的部署,runtime表示只在运行时使用 -->
                <unpack>false</unpack> <!-- 是否打包jar -->
                <excludes>
                    <exclude>不包括哪些文件</exclude>
                </excludes>
            </dependencySet>
        </dependencySets>
    </assembly>
    

    相关文章

      网友评论

          本文标题:maven分离依赖打包

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