ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-04-29 09:05:42  阅读:303  来源: 互联网

标签:xml lib jar 生成 maven pom SNAPSHOT


生成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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:xml,lib,jar,生成,maven,pom,SNAPSHOT
来源: https://blog.csdn.net/weixin_41722928/article/details/116257458

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有