背景说明:
工作的项目是一个多模块Maven工程,平时增量时需要使用命令对关联的模块进行编译,初步检查代码有没有错,但是最近一编译就报一大堆import找不到或者找不到符号的问题,这个问题比较常见,网上一搜也有很多人问。
因为最初对Maven没什么概念(其实现在也一样),编译的命令被我从 install 改成了 compile ,因为这样更快一些。。但之前都一直很正常,现在突然就编译各种乱七八糟的错误,于是各种百度google查查,有人说是jdk的问题,有人说是文件编码问题,但查了之后发现都不是,最终在一篇帖子的回复里看到了:
看到这个的时候,才"恍然大悟" pom 文件里配置的那些依赖到底是怎么用的,之前只是从表面上看出,这个模块需要依赖其他的模块,但不知道 compile、install 环节都是怎么利用这些模块的,加上和BOSS聊天的时候,听到他提到"本地仓库"四个字,瞬间感觉明白了什么,所以在本机做了以下的测试来加深一下Maven编译多模块项目时的简单原理。
新建Maven工程:
然后去修改common模块的pom文件,添加对utils的依赖:
编译测试:
直接对common模块编译:
报错很明显,没有utils模块的jar包
对utils模块使用compile命令:
成功,但这时是不会把项目编译成jar包放在本地仓库中的。
对utils模块使用install命令:
这时就可以看到在本地仓库中同步了jar包。
这时再对common模块编译:
通过,这时把本地仓库下的Utils-0.0.1-SNAPSHOT.jar删掉,再编译依旧会报错。
结论:
所以,验证之后对Maven编译和多模块间的依赖有了理解,虽然这可能是Maven本身的基础知识,但因为一直对Maven没有研究,只是凭pom文件中的配置简单个人理解,造成了编译出错这种比较低级的问题。。
相关推荐
每个生命周期又包含多个阶段,如compile、test、install和deploy。 4. **依赖管理**:Maven通过中央仓库管理依赖,开发者只需要在POM中声明依赖,Maven会自动下载并解决依赖冲突。此外,Maven支持传递性依赖,即...
**仓库**: Maven使用远程仓库(如中央Maven仓库)和本地仓库(默认位于用户主目录下的`.m2/repository`)来存储依赖。当项目需要某个依赖时,Maven首先会查找本地仓库,如果没有则从远程仓库下载。 **聚合项目与...
5. **仓库管理**:Maven使用中央仓库(Central Repository)和本地仓库(Local Repository)来存储依赖。中央仓库包含了大量的开源项目,而本地仓库则保存了项目构建过程中下载的所有依赖。 6. **Maven命令行界面**...
Maven拥有三个主要的生命周期阶段:`clean`,`default`(或`compile`),和`install`。`clean`用于清理项目产生的目标目录;`default`包括编译、测试、打包等步骤;`install`则将构建好的项目安装到本地仓库,便于...
`maven-settings`、`maven-plugin-api`、`maven-repository-metadata`、`maven-aether-provider`、`maven-model`和`maven-artifact`这些文件名暗示了它们分别是Maven的配置、API、仓库元数据、Aether库(用于仓库...
- **生命周期(Lifecycle)**:Maven有一套预定义的构建生命周期,如`clean`、`compile`、`test`、`package`、`install` 和 `deploy`,每个阶段都有对应的阶段目标(Phase)。 - **插件(Plugins)**:Maven的构建...
其次,`localRepository`是Maven的本地仓库路径,它存储了所有下载的依赖项和构建结果。在`conf/settings.xml`文件中,我们可以找到`<localRepository>`节点,其默认值通常为用户的主目录下的`.m2/repository`。为了...
Maven的生命周期包含清理(clean)、初始化(initialize)、编译(compile)、测试(test)、打包(package)、验证(verify)、安装(install)和部署(deploy)等阶段。通过命令行执行如`mvn clean compile`,...
Maven拥有生命周期(Lifecycle),包括清洁(clean)、编译(compile)、测试(test)、打包(package)、验证(verify)、集成测试(integration-test)、安装(install)和部署(deploy)等阶段。通过执行不同的...
4. **标准项目结构**:Maven提倡一种标准化的项目结构,使得不同项目间的迁移和理解变得容易。例如,源代码通常放在`src/main/java`,测试代码放在`src/test/java`,资源文件放在`src/main/resources`等。 5. **...
- **本地仓库(Local Repository)**:默认位于用户主目录的`.m2/repository`下,存储项目的依赖和已安装的工件。 - **远程仓库(Remote Repository)**:如Maven中央仓库(Central Repository),提供公开的第三方...
Apache Maven 是一个强大的项目管理和构建工具,主要用于Java应用程序的开发。Maven 使用一种标准化的项目对象模型(Project ...通过理解和掌握Maven的工作原理和使用方式,开发者可以更高效地管理和构建Java项目。
4. **执行构建命令**: 使用Maven的命令行工具进行构建操作,如`mvn clean compile`用于清理并编译项目,`mvn package`用于打包项目,`mvn install`将项目安装到本地仓库,`mvn deploy`则将项目部署到远程仓库。...
7. **生命周期和构建阶段**:Maven有一套预定义的生命周期,如`compile`、`test`、`package`、`install`和`deploy`,每个生命周期包含多个构建阶段。通过`mvn <phase>`命令,开发者可以控制项目的构建过程。 在实际...
使用Maven的命令行接口,你可以执行各种构建任务,如`mvn clean`清理项目,`mvn compile`编译源代码,`mvn test`运行测试,`mvn package`打包应用,`mvn install`将项目安装到本地仓库,以及`mvn deploy`将项目部署...
Maven的生命周期包括`clean`、`default`(也称为`compile`)和`install`等阶段,每个阶段都有一系列的构建目标。例如,`mvn clean`清理项目,`mvn compile`编译源代码,`mvn package`打包项目,`mvn install`将项目...
2. **仓库 (Repository)**:Maven使用本地仓库存储下载的依赖,同时连接到中央仓库(Central Repository)和其他远程仓库获取外部依赖。 3. **生命周期 (Lifecycle)**:Maven有三个主要的生命周期,包括`clean`...
仓库分为本地仓库(Local Repository)和远程仓库(Remote Repository),本地仓库是Maven默认保存下载依赖的地方,而远程仓库则可以是Maven中央仓库或其他私有仓库。 在压缩包的文件名列表中,"repository"可能...
例如,如果你想要更改本地仓库的位置,可以编辑`settings.xml`并修改`localRepository`元素。 **六、创建并构建项目** 现在你已经成功安装了Maven,可以开始创建和管理项目。使用`mvn archetype:generate`命令生成...
<localRepository>/path/to/your/maven/repository</localRepository> ``` - 如果你想配置镜像源以提高下载速度,可以在 `settings.xml` 中添加: ```xml <id>aliyun</id> 阿里云 Maven 镜像</name> <url>...