maven 配置 pom.xml 打包生成:单jar包/jar包+lib目录

生成jar包 2种方式:
1.打包项目依赖的所有jar 生成单个jar包
2.生成jar包 复制所需的依赖jar包到lib目录

Maven打包过程(顺序)

  • clean清空之前生成的文件
  • IDE内编译该程序 (并测试可成功运行)-- 必须生成class文件!(等待被打包)
  • 确定文件pom.xml中的各项配置
  • Maven刷新:Reimport All Maven Projects
  • Maven自动打包:Install或package

可打包项目已经编译生成的class文件 + 依赖的jar包 --> 生成单个jar包(可独立运行)

例1

下面这个pom.xml,可打包项目已经编译生成的class文件 + 依赖的jar包 --> 生成单个jar包(可独立运行)
searchgeturl-1.0-SNAPSHOT-jar-with-dependencies.jar

 

<?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>groupId</groupId>

    <artifactId>searchgeturl</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
    
        <plugins>
        
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>

                           <!--下面必须指定好主类 如com.my.Main -->
                            <mainClass>Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-my-jar-with-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

<!-- 项目依赖的jar包 -->
    <dependencies>
    <dependency>
        <!-- jsoup HTML parser library @ http://jsoup.org/ -->
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.10.2</version>
    </dependency>

        <!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.2</version>
        </dependency>

    </dependencies>




    <!-- 指定工程编码为UTF-8
    这样maven install就不会发出警告 [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
    -->
    <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

例1的pom.xml 得到的 完整目录结构:

 

.
├── archive-tmp
├── classes
│   ├── CommandDemo.class
│   ├── META-INF
│   │   └── MANIFEST.MF
│   └── Main.class
├── maven-archiver
│   └── pom.properties
├── maven-status
│   └── maven-compiler-plugin
│       ├── compile
│       │   └── default-compile
│       │       ├── createdFiles.lst
│       │       └── inputFiles.lst
│       └── testCompile
│           └── default-testCompile
│               └── inputFiles.lst
├── searchgeturl-1.0-SNAPSHOT-jar-with-dependencies.jar
└── searchgeturl-1.0-SNAPSHOT.jar

例2

下面这个pom.xml,可打包项目已经编译生成的class文件 + 依赖的jar包 --> 生成单个jar包(可独立运行)
Cknife-1.0-SNAPSHOT-jar-with-dependencies.jar

 

<?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>groupId</groupId>
    <artifactId>Cknife</artifactId>
    <version>1.0-SNAPSHOT</version>


    <build>

        <plugins>

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <!--下面必须指定好主类-->
                            <mainClass>com.ui.Cknife</mainClass>
                        </manifest>
                    </archive>

                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-my-jar-with-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>


            <plugin>

                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source><!-- 源代码使用的开发版本 -->
                    <target>1.8</target><!-- 需要生成的目标class文件的编译版本 -->
                    <!-- 一般而言,target和source保持一致的,但有时候不同:为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码中需要不使用低版本jdk不支持的语法) -->


                </configuration>
            </plugin>

        </plugins>
    </build>

    <!-- 项目依赖的jar包 -->
    <dependencies>

        <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.16.1</version>
        </dependency>



        <!-- https://mvnrepository.com/artifact/com.github.insubstantial/substance -->
        <dependency>
            <groupId>com.github.insubstantial</groupId>
            <artifactId>substance</artifactId>
            <version>7.3</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.github.insubstantial/trident -->
        <dependency>
            <groupId>com.github.insubstantial</groupId>
            <artifactId>trident</artifactId>
            <version>7.3</version>
        </dependency>


    </dependencies>

    

    <!-- 指定工程编码为UTF-8
    这样maven install就不会发出警告 [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
    -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>


生成:jar包+lib目录(依赖包)

例:下面这个pom.xml 生成 jar包+lib目录(含依赖包)

 

<?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>groupId</groupId>
    <artifactId>searchgeturl</artifactId>
    <version>1.0-SNAPSHOT</version>



    <build>
        <plugins>

            <!-- 下面这个plugin-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix><!--指定classpath的前缀-->
                            <mainClass>Main</mainClass><!--指定主类的类名-->
                        </manifest>
                    </archive>
                </configuration>
            </plugin>


            <!--  -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>



                            <!--指定outputDirectory-->
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>


                            <!--
                                <outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
                                Alternatively use ${project.build.directory}/classes/lib as OutputDirectory to integrate all jar-files into the main jar, but then you will need to add custom classloading code to load the jars.
                                -->



                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>



        </plugins>
    </build>

    <!-- 项目依赖的jar包 -->
    <dependencies>
        <dependency>
            <!-- jsoup HTML parser library @ http://jsoup.org/ -->
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.2</version>
        </dependency>

    </dependencies>




    <!-- 指定工程编码为UTF-8
    这样maven install就不会发出警告 [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
    -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

 

#用下面的pom.xml 得到的 一部分目录结构(保证下面的目录结构即可运行jar程序)

─── lib  #依赖包
│   ├── commons-cli-1.2.jar
│   └── jsoup-1.10.2.jar
└── searchgeturl-1.0-SNAPSHOT.jar #maven生成的 主jar包


#用下面的pom.xml 得到的  完整目录结构:

── classes #maven生成的
│   ├── CommandDemo.class
│   ├── META-INF
│   │   └── MANIFEST.MF #maven生成的 清淡文件
│   └── Main.class
├── lib  #依赖包
│   ├── commons-cli-1.2.jar
│   └── jsoup-1.10.2.jar
├── maven-archiver #maven生成的
│   └── pom.properties
├── maven-status#maven生成的
│   └── maven-compiler-plugin
│       ├── compile
│       │   └── default-compile
│       │       ├── createdFiles.lst
│       │       └── inputFiles.lst
│       └── testCompile
│           └── default-testCompile
│               └── inputFiles.lst
└── searchgeturl-1.0-SNAPSHOT.jar #maven生成的 主jar包



作者:极客圈
链接:https://www.jianshu.com/p/9146cec6cc60
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇:探讨下Searchable snapshot 在索引生命周期管理中的应用


下一篇:Photoshop为照片增加饱和度