普通Java程序用Maven 打jar包

目录

1. 需求   

2. 开发环境 

3. Maven配置

3.1 pom.xml

3.2 assembly插件配置

package.xml

4. 使用maven-jar-plugin打可执行jar包

​5. Maven使用maven-assembly-plugin装需要打包的文件打进zip包

7. 解压zip,执行jar包


1. 需求   

普通java maven项目打可执行jar包,可以执行不同类里的Main函数。

2. 开发环境 

  jdk+maven+idea

3. Maven配置

3.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>

    <groupId>com.wy</groupId>
    <artifactId>com.wy.Filenc</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                    <excludes>
                        <exclude>jdk/annotation/bytecodeAnnotations/**.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <!-- 对要打的jar包进行配置 -->
                <configuration>
                    <!-- Configuration of the archiver -->
                    <archive>
                        <!--生成的jar中,不要包含pom.xml和pom.properties这两个文件-->
                        <addMavenDescriptor>false</addMavenDescriptor>

                        <!-- Manifest specific configuration -->
                        <manifest>
                            <!--是否要把第三方jar放到manifest的classpath中-->
                            <addClasspath>true</addClasspath>

                            <!--生成的manifest中classpath的前缀,
                            因为要把第三方jar放到lib目录下,
                            所以classpath的前缀是lib/-->
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                    </archive>
                    <!--过滤掉不希望包含在jar中的文件-->
                    <excludes>
                        <!-- 排除不需要的文件夹(路径是jar包内部的路径) -->
                        <exclude>**/assembly/</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <!-- 对项目的组装进行配置 -->
                <configuration>
                    <!-- 指定assembly插件的配置文件所在位置 -->
                    <descriptors>
                        <descriptor>src/main/resources/assembly/package.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <!-- 将组装绑定到maven生命周期的哪一阶段 -->
                        <phase>package</phase>
                        <goals>
                            <!-- 指定assembly插件的打包方式-->
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

    <repositories>
        ...
        
    </repositories>

    <dependencies>
        ...
    </dependencies>

</project>

3.2 assembly插件配置

package.xml

<?xml version="1.0" encoding="UTF-8"?>
<assembly>
    <id>full</id>
    <!-- 最终打包成一个用于发布的zip文件 -->
    <formats>
        <format>zip</format>
    </formats>

    <!-- 把依赖jar包打包进Zip压缩文件的lib目录下 -->
    <dependencySets>
        <dependencySet>
            <!--不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录-->
            <useProjectArtifact>false</useProjectArtifact>

            <!-- 第三方jar打包进Zip文件的lib目录下, -->
            <!-- 注意此目录要与maven-jar-plugin中classpathPrefix指定的目录相同, -->
            <!-- 不然这些依赖的jar包加载到ClassPath的时候会找不到-->
            <outputDirectory>lib</outputDirectory>

            <!-- 第三方jar不要解压-->
            <!--<unpack>false</unpack>-->
        </dependencySet>
    </dependencySets>

    <!-- 文件设置,你想把哪些文件包含进去,或者把某些文件排除掉,都是在这里配置-->
    <fileSets>
        <!-- 把项目自己编译出来的可执行jar,打包进zip文件的根目录 -->
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>

        <!--
        把项目readme说明文档,打包进zip文件根目录下
        (这里针对目录document/readme.txt文件)
        ${projet.document.directory}是pom.xml中自己配置的
         -->
        <fileSet>
            <directoryl>${projet.document.directory}</directoryl>
            <outputDirectory></outputDirectory>
            <includes>
                <include>readme.*</include>
            </includes>
        </fileSet>

        <!--
        把项目相关的说明文档(除了readme文档),
        打包进zip文件根目录下的document目录
        (这里针对document/exclode.txt文件)
        ${project.document.directory}是在pom.xml中自己配置的
        -->
        <fileSet>
            <directory>${project.document.directory}</directory>
            <outputDirectory>document</outputDirectory>
            <excludes>
                <exclude>readme.*</exclude>
            </excludes>
        </fileSet>

        <!--
        把项目的脚本文件目录(src/main/scripts )中的启动脚本文件,
        打包进zip文件的根目录
        (这里针对的是src/scripts/execute/include-file.sh文件)
        ${project.script.execute.directory}
        -->
        <fileSet>
            <directory>${project.script.execute.directory}</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>*</include>
            </includes>
        </fileSet>

    </fileSets>
</assembly>

4. 使用maven-jar-plugin打可执行jar包


5. Maven使用maven-assembly-plugin装需要打包的文件打进zip包


7. 解压zip,执行jar包

java -cp xxx.jar xxpackage.xxClass

发布了95 篇原创文章 · 获赞 16 · 访问量 8219

猜你喜欢

转载自blog.csdn.net/sarafina527/article/details/104306593