以下是将 Java 项目正确打包为可使用的 JAR 文件的详细步骤,适用于普通 Java 项目(非 Maven/Gradle 管理):
前提准备假设你的项目结构如下(以之前的ArrayUtil.java为例):
plaintext
1234myproject/ # 项目根目录└── src/ # 源代码目录 └── util/ # 包名目录 └── ArrayUtil.java # 你的Java源文件(含main方法或工具类)
步骤 1:编译 Java 源文件为 class 文件
打开命令行(Windows:cmd;Mac/Linux:Terminal)
进入项目根目录myproject:
bash
1cd /path/to/myproject # 替换为你的项目实际路径
编译ArrayUtil.java,生成.class文件(会自动创建与包结构一致的目录):
bash
1javac -d ./classes src/util/A ...
Q:Aware感知接口的作用是什么?A:Aware接口是 Spring 提供的一种机制,让 Bean 能够 “感知” 并获取 Spring 容器内部的核心组件或上下文信息。这些信息包括两类:一是容器核心组件(如ApplicationContext、Environment等);二是 Bean 自身的元数据(如 Bean 在容器中的名称、类加载器等)。
Q:为什么需要Aware接口?A:Spring 的核心思想是 “反转控制(IoC)”,通常 Bean 无需知道容器的存在。但在特殊场景下(如手动获取其他 Bean、读取配置、获取自身在容器中的名称等),Bean 需要主动与容器交互,Aware接口就提供了这样的 “沟通窗口”。
Q:常见的Aware接口有哪些?分别用于什么场景?A:常见的Aware接口及用途如下:
ApplicationContextAware:获取 Spring 容器上下文(最常用);
BeanNameAware:获取当前 Bean 在容器中的名称;
EnvironmentAware:获取环境配置(系统变量、配置文件等);
ResourceLoaderAware:获取资源 ...
在 Spring 项目中,这些文件夹(包)是按照分层架构和职责划分来组织代码的,目的是让项目结构清晰、职责明确,符合面向对象设计思想和 Spring 的最佳实践。下面分别解释每个包的含义和实际应用:
1. bean 或 entity(实体层)
含义:存放 Java 实体类(POJO - Plain Old Java Object),对应数据库中的表结构。
作用:用于封装数据,作为数据传输的载体。
实际应用:
java
运行
1234567// bean/User.javapublic class User { private Long id; private String username; private String password; // getter/setter/构造方法}
这个类的字段通常与数据库表的列一一对应,比如User类对应user表。
2. config(配置层)
含义:存放 Spring 的配置类,替代传统的 XML 配置文件。
作用:配置 Bean 的创建、依赖注入、AOP、事务管理等核心 ...
默认,分层注解能起作用的前提是,这些组件必须在主程序所在的包 及其 子包结构下
Spring为我们提供了快速的MVC分层注解1、@ControlLer控制器
2、@Service 服务层
3、@Repository持久层
4、@Component 组件
(这些注解都是组件的意思,注解是给人看的,都能存入组件)
@ComponentScan ———– 组件批量扫描例:
@ComponentScan(basePackages="com.atguigu.spring.controller)
按照包的路径扫描
组件批量扫描,只扫利用Spring 相关注解注册到容器中的组件
(不常用,老实把组件放到 主程序所在的包里面 比较好)
第三方组件想要导入容器中,没办法快速标注分册注解1.@Bean,自己new,注册给容器
2.@Import(CoreConstants.class) 即可导入组件 (注解标注一次就可以了)
Scope 调整组件的作用域1、@Scope("prototype"):非单实例:
容器启动的时候不会创建非单实例组件的对象。
什么时候 ...
maven
未读maven
未读1.聚合概念
Maven聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建统一按顺序触发子
工程构建的过程!!
2.聚合作用
a.统一管理子项目构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
b.优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建
失败的情况。
3.聚合语法
父项目中包含的子项目列表。
maven
未读当多个子工程中导入依赖的版本可能不一致,要解决版本不同的问题
思路1:直接在父工程中引入依赖 问题:所有的子工程都引入依赖,使得不需要的子工程被迫引入了该依赖思路2:父工程不引入依赖,只做依赖版本的声明,(并没有引入依赖) 子工程只需要写gav标签中的ga,版本v去父工程中找到。
它背后的需求是: - 多个模块要使用同一个框架,它们应该是同一个版本,所以整个项目中使用的框架版本需要 统一管理。 - 使用框架时所需要的jar包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最 终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。
通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的jar包;又
能够将以往的经验沉淀下来,节约时间和精力。
一般父工程的都是pom,父工程不打包,也不写代码
直接在父工程的项目下新建模块,就自动是父子工程的关系了: (子工程的配置文件)
在父工程的pom.xml 文件中声明版本信息(声明和导入不一样):
maven
未读构建概念:项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
主动触发场景:
重新编译:编译不充分,部分文件没有被编译!
打包:独立部署到外部服务器软件,打包部署
部署本地或者私服仓库:maven工程加入到本地或者私服仓库,供其他工程使用
命令方式构建: ![[Pasted image 20250907102205.png]] 1. 命令执行需要我们进入到项目的根路径(进到项目所在文件夹) (pom.xml 平级) 2. 部署 必须是jar包形式
可视化方式构建:
maven工程的本地部署: 清理 编译 测试 打包 报告 部署 (比较麻烦 看下文)构建命令周期:触发周期后的命令会自动触发同一周期前的命令 简化触发构建命令过程!
有序的构建命令容器
清理 clean
构建 compile test package install/deploy
报告 site
(顺序)
打包:package 不需要 c ...




