idea 打jar包、lib文件夹

idea目录文件

idea四层级结构

idea操作Java文件的基本单位:项目(Project)。对应四级结构
第1层级架构:项目(project)

在 IntelliJ IDEA 中Project是最顶级的结构单元,然后就是Module,一个Project可以有多个Module,模块之间彼此可以相互依赖

项目project包含:.idea文件夹(项目的配置文件)out文件夹(第2层级对应的所有字节码文件)模块文件夹(第2层级架构)

第2层级架构:模块(moudle)

在一个项目中,每个模块都可以使用特定的SDK或继承在项目级别定义的SDK。

模块moudle包含:src文件夹(存储第3层级架构内容)模块名.iml 文件(模块配置文件)
模块上右键-Open Module settiongs(可以新建模块,移除模块,导入模块)

第3层级架构:包(Package)
包的含义:多级文件夹
包的好处:1.对程序文件管理分类。2.有效避免重名的文件    

包中包含:
    java程序(第4层架构)

包的注意:如果程序在包中,必须在第4层架构进行包的声明
包的声明:
    1.包名就是公司域名倒序+功能 如:com.atguigu.idea
    2.格式:package 包名;
    3.命名规范:
         一个单词:单词全部小写(一般没有)
         多个单词:使用.进行间隔,一个单词就是一级文件夹

第4层级架构:.java文件(类文件)

public class HelloWorld {public static void main(String[] args) {System.out.println("Helloworld"); }
}

.iml文件

.iml:配置信息之意, infomation  of  module

iml文件是idea自己创建的模块文件,用于java应用开发,存储一些模块相关的信息。每个模块都有一个iml文件。 


.idea目录

.idea目录:存放项目的配置信息。包括数据源,类库,项目字符编码,历史记录,版本控制信息等


working dir目录

编辑配置


lib文件夹

lib文件夹

lib文件夹用于存放项目所依赖的第三方依赖包(jar文件),比如网路请求库,数据库连接等等。以便能够正确地引用和使用这些库。

lib文件夹通常位于Java项目的根目录下。在一个标准的Java项目中,lib文件夹下会包含多个jar文件,每个jar文件对应一个第三方库。

jar文件实际上是class文件的zip压缩存档

如下,创建LibTest的一个空工程,并手动新建lib文件夹,把mysql的包放进去

public class Demo {public static void main(String[] args) throws Exception {String className = "com.mysql.jdbc.Driver";//1. 注册驱动Class clazz = Class.forName(className);Driver driver = (Driver) clazz.newInstance();DriverManager.registerDriver(driver);//2. 获取连接String url = "jdbc:mysql://127.0.0.1:3306/spring-boot-demo?serverTimezone=UTC&useSSL=false";String user = "root";String password = "root";Connection conn = DriverManager.getConnection(url, user, password);//3.获取数据库操作对象Statement stmt = conn.createStatement();//4.执行查询 SQL语句,返回结果集String username = "zhangsan";String sql = "select * from t_user where  username= '" + username + "'";ResultSet rs = stmt.executeQuery(sql);//5.通过索引来遍历读取结果集while (rs.next()) {int userId = rs.getInt(1);String name = rs.getString(2);String balance = rs.getString(3);System.out.println("userId:" + userId + " 姓名:" + name + " 余额:" + balance);}//6.资源的释放,讲道理要写到finally语句块中rs.close();stmt.close();conn.close();}
}

此时还没有使用idea工具把mysql-connector-java-5.1.47.jar添加到项目的classpath中,则会报错


引用lib文件夹中的库

当我们在Java代码中需要使用lib文件夹中的库时,首先需要将这些库添加到项目的classpath中。classpath是Java程序在运行时搜索类和资源文件的路径。

方式一: 给模块添加lib文件夹

点击jars or directiories

选择lib文件夹,点击ok,点击apply应用即可

方式二:添加项目级别的lib

在lib文件夹上右键-Add as Library…构建项目所需的jar包

Level级别有三个,选择默认的点击ok

  • Module Library:模块级别,只能本模块使用,别的模块看都看不见
  • Project Library(默认选中):项目级别,该项目下所有的模块均能看见和选中使用
  • Global Library:全局级别,任何项目均可看见和使用

再次运行Demo类,运行成功如下:


在命令行中使用classpath参数

如果你使用命令行编译和运行Java程序,可以使用-cp或-classpath参数来指定classpath

javac -cp .:lib/* com/example/Main.java
java -cp .:lib/* com.example.Main

上述命令中的.表示当前目录,lib/*表示lib文件夹下的所有jar文件。


spring-boot-maven-plugin

打包插件用的是spring-boot-maven-plugin,这个插件会把项目中的代码和相关依赖一起打包成一个jar包,我们只需哪到这个jar包发布到服务器上即可,很方便

可以通过压缩工具查看jar包的文件目录,找到BOOT-INF下lib目录,可以看到里面有很多依赖包,然后其他的文件就是一些class文件和配置文件


META-INF目录

jar文件中有一个特定的目录来存放标签信息:META-INF目录,其中一个名叫manifest.mf的文件,它包含了jar文件的内容描述,在应用程序运行时向JVM提供应用程序的信息

  • MANIFEST.MF:这个 manifest 文件定义了与扩展和包相关的数据。

 从 MANIFEST 文件中提供的信息大概可以了解到其基本作用

  • JAR 包基本信息描述
  • Main-Class 指定程序的入口,这样可以直接用java -jar xxx.jar来运行程序
  • Class-Path 指定jar包的依赖关系,class loader会依据这个路径来搜索class

manifest 文件中的每一行都是 key-value 对应的:属性名开头,接着是 ":" ,然后是属性值,每行最多72个字符,如果需要增加,可以在下一行续行,续行以空格开头,以空格开头的行都会被视为前一行的续行。


可以执行的 JAR

可以执行的 JAR 与 普通的 JAR 最直接的区别就是能否通过 java -jar 来执行。

如果一个 JAR 文件被当作可执行文件,则其中的 MANIFEST 文件需要指出该程序的主类文件


Native Library Locations

Java是一种高级语言,其运行在Java虚拟机(JVM)上。而其他语言编写的库文件需要运行在操作系统上。为了能够在Java程序中加载这些库文件,需要通过Java Native Interface (JNI)来实现Java和其他语言的交互。

JNI是Java提供的一种机制,用于在Java程序中调用C、C++等其他语言编写的库文件。在Java中,通过System.loadLibrary()方法来加载库文件

当我们调用System.loadLibrary()方法时,Java会搜索java.library.path系统属性所指定的路径来查找库文件。如果找不到对应的库文件,就会抛出java.lang.UnsatisfiedLinkError异常。

在IDEA中,可以通过设置VM options来配置<code>-Djava.library.path</code>。以下是具体的操作步

System.out.println(System.getProperty("java.library.path"));

将.dll文件路径如图配置在VM option中即可.

路径结构类似于-Djava.library.path=F:/pro/znny_syx_standard/lib   

其中-Djava.library.path=为固定写法


Project Structure

参考:玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定-idea project structure (51cto.com)

Project Structure顾名思义,是针对Project维度的结构视窗.

顶部菜单File -> Project Structure..打开一个Project的结构展示窗口

可以看到它左边的“菜单栏”,共分为三个part:

  • Project Settings:项目设置(最重要),本文详解
  • Platform Settings:平台设置,也叫全局设置。用于管理SDK们(如JDK、Kotlin的SDK等)、全局库。

一般来讲,全局的JDK都会配置在此处,比如我因为经常要做多版本尝试,就管理了多个JDK版本


Project页

此视窗可以看到Project本身的基础信息。如:名称、SDK版本、语言等级等等,比较简单。

1.为何是SDK版本而不是JDK版本?

答:因为IntelliJ IDEA是JVM平台IDEA,不仅仅支持Java还有其它语言如Kotlin,所以写成SDK更抽象

2.为何指定了SDK还要指定语言等级?

答:因为SDK版本并不直接决定语言等级。如你用的JDK 11,但依旧可以把语言等级调为8来进行编译/运行。这是集成开发环境的优势所在,轻松对多环境进行定制化支持

3.SDK和语言等级Project都可指定,作为全局默认

这些配置Module默认集成,但可自行修改自己的。比如module 1使用Java 5编译,module 2使用Java 11编译,这是允许的


Module页

Module作为实际存在形式,所有的源代码、配置、依赖等都在这里,

每个模块都能独立管理着自己的依赖,这种关系在模块自己的.iml文件中记录着。

知识点:

  1. Project创建时默认会创建一个同名的Module模块
  2. Module默认沿用Project的SDK、语言等级等设置,当然也可自己指定
  3. 每个Module可自行管理依赖,可以是二方库、三方库......
  4. 本模块的依赖情况默认存储在项目的{moduleName}.iml文件里

idea模块(module) 是如何实现引用的,若A模块需要使用B模块里的东西可以直接在 A模块组织文件 A.iml 中添加一句

<orderEntry type="module" module-name="B模块名字" />

模块如何依赖其它Module

添加Dependency依赖时,请选择Module Dependency...选项:

点击ok,搞定了。对应的,此依赖关系也会体现在hello-service.iml这个配置文件上:


Libraries页

当某Library是所有/大部分模块都需要的依赖时,就可以上升为Project级别的依赖,抽取到Libraries标签页来统一管理。

选择作用的模块:

当然喽,你也可以一个都不选(点击cancle),那么该jar只是被创建了,而不作用于任何module模块。


Artifacts页

IDEA如何打Jar包?如何打War包? 来,上菜~

执行完此命令后,在Output Directory里就能看到hello.jar这个打包好的文件啦。


.classpath文件

在使用eclipse或者myeclipse进行java项目开发的时候,每个project(工程)下面都会有一个.classpath文件,那么这个文件究竟有什么作用?

如果把该文件删除,则eclipse不能讲该工程识别为一个正常的java工程,仅仅当做普通的文件夹而导致不能正常运行。

idea中打jar包

创建Artifact

jar (Java Archive File),翻译过来就是java的档案文件。在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的,包含了JAR包的描述信息、主类的全类名等信息。

File -->Project Structure -->Artifacts --> Jar --> From module with dependencies.如下图

打开后,填写完成 点击ok

Module下拉框中选中需要打包的Module,

Main Class 框中选择主类。

Directory for META-INF/MENIFECT.MF   这里是输入一个路径,用于保存MENIFECT.MF文件,使用默认的路径即可

Include tests 如果选中,打包时将会把测试用例(Tests)类也打包进去。通常不用选中。

JAR files from libraries有两个选项:

第一个是打完包就是一个 jar 包;第二个打完包,是一个 jar 包+外带你项目所用的 jar 包

extract to the target JAR

表示将第三方JAR包内容都解压并统一打包到最后生成的JAR包。如下图

copy to the output directory and link via menifest   

表示将第三方JAR包内容拷贝到输出目录。如下图

如果你只是希望打包Module本身,可以选择“extract to the target JAR”;

如果希望打包Module的同时,也将第三方的JAR一起打包,可以选择“copy to the output directory and link via menifest”。

--------------------


配置Artifact

Name 和 Output directtory

Name 输入框中可以修改Artifact的名称(不是生成的jar文件的名称)。

Artifacts “tab页”就会显示如下:jar包的输出目录idea会有默认,可自己去改

Output Layout

Output Layout 中,你可以添加或删除需要打包的内容。

只希望打包Module本身,我们并不需要那么多的jar,在Output Layout中把多余的“减掉”

再重新build,打包后就只包含这个Module的class,不会包含第三方JAR

修改生成的jar文件的名称

如果希望修改生成的jar文件的名称,需要右键点击Output Layout框中的根节点,选择rename,如下图:

打包后结果


Build Artifacts

配置工作完成后,就可以正式构建jar包了

Build --> Build Artifacts,选择下面的Build,就完成jar包构建输出了。


打包后运行

java -jar xxx.jar

这种模式比较简单,适用于所有的class/资源都打包到一个jar文件中的情况,

一个项目中可能包含大量的第三方库,这时,如果将所有的库都打包到同一个jar文件中,显然是不合适的,所以通常我们会使用下面的方式。

java -cp xxx xxx.xxx


jar包冲突

有时候引入的jar包中的包名类名与其他jar包中的包名类名相同,导致程序在编译或运行的时候无法正确引用想要的类

Intellij IDEA里怎样配置maven在编译时加入lib目录下的jar包

<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding><compilerArguments><extdirs>project-demo\lib</extdirs></compilerArguments></configuration></plugin></plugins>       </build>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2805468.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络面经_体系结构一文说清

编辑&#xff1a;平平无奇的羊 目录 基础 1. 计算机网络结构体系 三种模型之间的区别&#xff1a; 如何背诵&#xff1a; 进阶 OSI七层模型&#xff1a; TCP/IP四层模型&#xff1a; TCP/IP五层模型 总结 字节实习生为大家带来的是计算机网络面经系列博文&#xff0c;由浅…

XUbuntu22.04之解决:systemd-journald占用cpu过高问题(二百一十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Java实现毕业生追踪系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登陆注册模块2.2 学生基本配置模块2.3 就业状况模块2.4 学历深造模块2.5 信息汇总分析模块2.6 校友论坛模块 三、系统设计3.1 用例设计3.2 实体设计 四、系统展示五、核心代码5.1 查询我的就业状况5.2 初始化就业状况5.…

汪峰哭晕在厕所-《实现领域驱动设计》中译本评点-第2章(1)

相关链接 DDD领域驱动设计批评文集>> 《实现领域驱动设计》的翻译错误>> [答疑]《实现领域驱动设计》的译者其实没错?&#xff08;一&#xff09;>> [答疑]《实现领域驱动设计》的译者其实没错?&#xff08;二&#xff09;>> 十多年前&#xff0…

[附完整代码]群智能算法跑21种真实世界优化问题,并输出结果到excel||群智能算法跑CEC 2020真实世界优化问题,并输出结果到excel

1、简介 灰狼算法跑跑21种真实世界优化问题|足球训练队优化算法跑21种真实世界优化问题||牛顿拉夫逊算法跑21种真实世界优化问题||冠状豪猪CPO跑21种真实世界优化问题。 ‘FTTA’,‘BWO’, ‘CPO’, ‘FHO’, ‘GWO’, ‘HHO’, ‘NRBO’,‘SCA’,‘SGA’,WOA’跑21种真实世…

【MySQL】多表操作、事务、索引

MySQL MYSQL 多表设计 一对多插入测试数据外键约束(物理外键)使用逻辑外键 MYSQL 多表设计 一对一表结构 MYSQL 多表设计 多对多 MYSQL 多表设计 一对多 建表语句 员工表 CREATE TABLE tb_emp (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,username VARCHAR(20) N…

谷歌gemma2b windows本地cpu gpu部署,pytorch框架,模型文件百度网盘下载

简介 谷歌DeepMind发布了Gemma,这是一系列灵感来自用于Gemini相同研究和技术的开放模型。开放模型适用于各种用例,这是谷歌非常明智的举措。有2B(在2T tokens上训练)和7B(在6T tokens上训练)模型,包括基础和指令调整版本。在8192个token的上下文长度上进行训练。允许商业使…

Android进阶之旅(第5天)

充实的一天又过去了&#xff0c;今天真的好冷啊&#xff0c;我们这里雪很大&#xff0c;早上最傻逼的决定就是穿了一个短的棉袜出来&#xff0c;漏脚踝&#xff0c;冷成傻子 接下来老规矩&#xff0c;看下昨天计划的完成情况&#xff1a; 今日计划&#xff1a; 1.过bug 2.看…

金航标电子位于广西柳州鹿寨县天线生产基地于大年正月初九开工了!!!

金航标kinghelm&#xff08;www.kinghelm.com.cn&#xff09;总部位于中国深圳市&#xff0c;兼顾技术、成本、管理、效率和可持续发展。东莞塘厦实验室全电波暗室、网络分析仪、高低温测试柜等仪器设备齐全&#xff0c;可进行高低温、双85等测试&#xff0c;独立完成产品的检测…

2024生物发酵魅力展示会-光德流体

参展企业介绍 河北光德流体控制有限公司始建于1996年&#xff0c;是一家从事以不锈钢为母材的洁净应用材料研发与专业制造的实体企业。产品主要包括卫生级球阀&#xff0c;隔膜阀&#xff0c;蝶阀等&#xff0c;并广泛应用于生物发酵&#xff0c;医疗制药&#xff0c;食品饮料…

建立不同类型网站分别大概需要多少钱??

如今&#xff0c;越来越多的企业会考虑建立一个企业官方网站来展示企业形象&#xff0c;或者建立一个电子商务网站平台来拓展业务渠道&#xff0c;或者建立一个企业内部网来协助企业进行网上工作。 网站建设的类型有很多种&#xff0c;不同类型的网站成本差异很大。 因此&#…

3DIoUMatch: Leveraging IoU Prediction for Semi-Supervised 3D Object Detection

3DIoUMatch: Leveraging IoU Prediction for Semi-Supervised 3D Object Detection 论文链接&#xff1a;https://arxiv.org/pdf/2012.04355.pdf 代码链接&#xff1a;https://github.com/yezhen17/3DIoUMatch 作者单位&#xff1a;Stanford University等 发表平台&#xff1a;…

浙大恩特客户资源管理系统 PurchaseAction SQL注入漏洞复现

0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统中 PurchaseActio 接口处存在SQL注入漏洞,未经身份认证的攻击者可以利用该…

一文带你了解 OpenAI Sora

最近AI圈最火的无疑是OpenAI在2月15日发布的Sora。 Sora可以根据文本生成一分钟的高清视频&#xff0c;生成的视频画质、连续性、光影等都令人叹为观止&#xff0c;Sora无疑将视觉生成推到新的高度。 本文将重点回答三个问题&#xff1a;&#xff08;1&#xff09;Sora的原理…

mysql 事务详解一

前言 提到事务&#xff0c;大家肯定不陌生。在我们现实生活中也是存在的&#xff0c;比如我们去超市购物&#xff0c;然后去支付。虽然是两个步骤&#xff0c;必须保证同时成功&#xff0c;这个交易才可以完成。 如果这个场景&#xff0c;拿到我们购物系统&#xff0c;就是几…

浅拷贝导致的bug

错误代码&#xff1a; //初始化formTableData的值 const formTableData ref({saleOrderTime:,saleOrderDetails:[] });const showModal async (item) > {//调接口获取后端返回的数据let data (await api.searchSaleOrderById({saleOrderId:item.id})).dataconsole.log(&…

零样本带解释性的医学大模型

带解释性的医学大模型 提出背景解法拆解方法的原因对比以前解法 零样本带解释性的医学大模型如何使用CLIP模型和ChatGPT来进行零样本医学图像分类用特定提示查询ChatGPT所生成的医学视觉特征描述相似性得分在不同症状上的可视化&#xff0c;用于解释模型的预测注意力图的可视化…

使用python查看官网是否发布新的内容

目录 前言 第一章、python介绍和使用pip install下载包 1.python介绍 2.使用vscode编写python 3.pip install的使用 第二章、查看官网是否发布新的内容 第三章、代码实现 目录结构 代码实现 check_new_news.py files.py news.py main.py file.txt 运行演示 前言 也…

基于飞凌嵌入式RK3568核心板的边缘计算门禁屏解决方案

边缘计算作为一种将计算任务从云端推向网络边缘的新型计算模式&#xff0c;正日益受到各行各业的青睐&#xff0c;并已在我们的生产和生活当中得到了广泛的应用&#xff0c;其中“门禁系统”就是最常见的与边缘计算相结合的应用之一。 传统的门禁系统受限于数据处理能力和网络…

【C语言】详解计算机二级c语言程序题

文章目录 前言资料相关程序题 一&#xff08;字符串&#xff09;程序题 二&#xff08;数组&#xff09;程序题 三&#xff08;基础&#xff09;程序题 四&#xff08;结构体&#xff09;程序题 五&#xff08;结构体&#xff09;程序题 六&#xff08;基础&#xff09; 前言 …