热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Maven基础pom.xml中配置打包的入口程序和第三方依赖jar包(包含自己jar包)

1.说明本文的打包操作适用于普通的java项目。本文介绍的maven的打包方式是把java项目的第三方依赖包与主程序独立出来,即目标jar包与依赖包目录同级。本文介绍
1.说明

本文的打包操作适用于 普通的java项目
本文介绍的 maven 的打包方式是把java项目的第三方依赖包与主程序独立出来,即目标jar包与依赖包目录同级。
本文介绍的项目中包含自己写的本地的第三方依赖包。


2.具体的操作

2.1 项目结构介绍


一个标准的maven项目: 目录结构完全符合maven规范
【注意】:自己的第三方依赖包的名称中一定要包含一个 版本号的信息,这样在pom.xml中配置时可以使用到。 如 : java-utile-from-northcastle-1.0.jar 中的 -1.0

helloworld-maven-java| -- src| -- main| -- java| -- com.northcastle| -- App.java : 主类| -- resources| -- libs| -- java-utile-from-northcastle-1.0.jar| -- test| -- java| -- com.northcastle| -- AppTest.java| -- resources|-- pom.xml

App.java 的文件内容:

package com.northcastle;import com.alibaba.fastjson.JSONObject;
import com.northcastle.utile.a.UtileA;
import com.northcastle.utile.b.UtileB;/*** Hello world!**/
public class App {public static void main( String[] args ){System.out.println("=== App run begin ===");System.out.println( "Hello World!" );System.out.println( "欢迎使用maven进行打包工作" );JSONObject jsonObject = new JSONObject();jsonObject.put("name","northcastle");System.out.println("jsonObject is : "+jsonObject);UtileA.sayHelloA(); // 使用到了自己的第三方的依赖包UtileB.sayHelloB(); // 使用到了自己的第三方的依赖包System.out.println("=== App run end ===");}
}

2.2 pom.xml文件内容(核心)


pom.xml 中主要 包含了引入的第三方的依赖包(包含自己写的第三方依赖包)、以及跳过测试的配置、打包的配置。
具体内容如下:

<project xmlns&#61;"http://maven.apache.org/POM/4.0.0" xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&#61;"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.northcastlegroupId>
<artifactId>helloworld-maven-javaartifactId>
<version>1.0-SNAPSHOTversion><packaging>jarpackaging>
<properties><maven.compiler.source>1.8maven.compiler.source><maven.compiler.target>1.8maven.compiler.target><maven.compiler.encoding>UTF-8maven.compiler.encoding><project.build.sourceEncoding>UTF-8project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>properties>
<dependencies><dependency><groupId>com.alibabagroupId><artifactId>fastjsonartifactId><version>1.2.75version>dependency><dependency><groupId>junitgroupId><artifactId>junitartifactId><version>4.11version><scope>testscope>dependency><dependency><groupId>com.northcastlegroupId><artifactId>java-utile-from-northcastleartifactId><version>1.0version><scope>systemscope><systemPath>${project.basedir}/src/main/resources/libs/java-utile-from-northcastle-1.0.jarsystemPath>dependency>dependencies><build><finalName>helloworld-maven-javafinalName><plugins><plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-surefire-pluginartifactId> <configuration><skip>trueskip>configuration>plugin><plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-jar-pluginartifactId><configuration><classesDirectory>target/classesclassesDirectory><archive><manifest><mainClass>com.northcastle.AppmainClass><useUniqueVersions>falseuseUniqueVersions><addClasspath>trueaddClasspath><classpathPrefix>libs/classpathPrefix>manifest><manifestEntries><Class-Path>.Class-Path><Class-Path>libs/java-utile-from-northcastle-1.0.jarClass-Path>manifestEntries>archive>configuration>plugin><plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-dependency-pluginartifactId><executions><execution><id>copy-dependenciesid><phase>packagephase><goals><goal>copy-dependenciesgoal>goals><configuration><type>jartype><includeTypes>jarincludeTypes><outputDirectory>${project.build.directory}/libsoutputDirectory>configuration>execution>executions>plugin>plugins>
build>project>

2.2.1 pom.xml 中表示指定程序入口类的配置


这一块是配置的核心&#xff1a;
最特殊的是 &#xff1a;配置中的这一句话 &#xff1a;
当有多个本地的jar包时&#xff0c;用空格进行分开。
Class-Path标签只能有一个

<manifestEntries><Class-Path> . libs/java-utile-from-northcastle-1.0.jar xxxxx.jarClass-Path>manifestEntries>

<plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-jar-pluginartifactId><configuration><classesDirectory>target/classesclassesDirectory><archive><manifest><mainClass>com.northcastle.AppmainClass><useUniqueVersions>falseuseUniqueVersions><addClasspath>trueaddClasspath><classpathPrefix>libs/classpathPrefix>manifest><manifestEntries><Class-Path>. libs/java-utile-from-northcastle-1.0.jarClass-Path>manifestEntries>archive>configuration>plugin>

2.2.2 pom.xml 中表示第三方依赖的配置


这一块是配置的核心 &#xff1a; 如果不理解&#xff0c;直接抄上就行

<plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-dependency-pluginartifactId><executions><execution><id>copy-dependenciesid><phase>packagephase><goals><goal>copy-dependenciesgoal>goals><configuration><type>jartype><includeTypes>jarincludeTypes><outputDirectory>${project.build.directory}/libsoutputDirectory>configuration>execution>executions>plugin>

2.3 执行打包命令


在 pom.xml 文件所在的目录下执行打包命令 &#xff1a; mvn clean package

在这里插入图片描述

在这里插入图片描述

2.4 查看打包后target目录


根据我们的pom.xml 中的配置&#xff0c;打包成功后:
1.会在 target目录 下生成一个 libs的目录来存放我们的第三方的依赖包&#xff1b;
2.会在 target目录 下生成我们的目标jar包

在这里插入图片描述
在这里插入图片描述

2.5 运行jar包&#xff0c;检查效果


使用java -jar xxx.jar 命令&#xff0c;运行程序

在这里插入图片描述
》 ps : 如果各位coder出现打包成功&#xff0c;但在运行时报 ClassNotFoundException的异常&#xff0c;请仔细阅读本篇文章的2.2节&#xff0c;会给你启发的。

3.完成

Congratulations!
You are one step closer to success!


推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
author-avatar
倔强的石头二虎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有