一 背景
一般我们需要接手一个项目的时候,这时候需要把代码从远程拉取下来。然后在本地先跑起来。但是刚拉取下来的代码,会遇到各种的相关问题。一般代码会爆红。这时候我们需要依次排查解决相关的问题。
二 原因
首先我们可以先检查我们的代码和jdk版本是否一致,不一致的时候,需要改用项目要求的版本,然后我们需要检查maven版本和idea中设置的maven路径。然后核实maven中的setting.xml的仓库地址。一般这些操作以后,基本上就可以解决爆红问题了。
但是还有特殊的情况,我们特殊时候有些jar包拉取失败。这个时候我们需要确认是否是私服的jar包,如果是,和相关负责人要jar包。然后放到自己的仓库。放到自己的本地仓库。一般两种方式,一种负责人给你的文件夹替换到相应的你的本地文件夹就可以。有时候这种方式还是不行。这个时候需要我们用maven指令去生成,将jar包加载到本地仓库(见2.1)。这个时候就可以正常使用了。但是如果我们是相关的负责人,除了本地引入完成,还需要额外在私服上上传。
2.1 maven指令去生成jar包
让我们深入细化每一个步骤,以便你能够逐步操作。假设你已经下载了一个名为my-library.jar的私有JAR包,并希望将其安装到本地Maven仓库,接着在Maven项目中使用它。
2.1.1 安装私有JAR包到本地Maven仓库
2.1.1.1 打开命令行工具
- 在Windows上,按
Win + R键,输入cmd,然后按回车键打开命令提示符。 - 在Mac或Linux上,打开终端应用程序。
2.1.1.2 运行安装命令
将以下命令复制并粘贴到命令行中,并执行。假设你的JAR包位于路径/path/to/my-library.jar,你希望设定的groupId为com.example,artifactId为my-library,version为1.0.0。根据你的实际情况调整路径。
mvn install:install-file -Dfile=/path/to/my-library.jar -DgroupId=com.example -DartifactId=my-library -Dversion=1.0.0 -Dpackaging=jar
例如,如果你的JAR包位于C:\my-libraries\my-library.jar,命令将是:
mvn install:install-file -Dfile=C:\my-libraries\my-library.jar -DgroupId=com.example -DartifactId=my-library -Dversion=1.0.0 -Dpackaging=jar
2.1.2 验证安装成功
安装成功后,你应该看到安装成功的信息,例如:
[INFO] BUILD SUCCESS
检查本地Maven仓库,确保包已安装。默认情况下,本地Maven仓库位于~/.m2/repository。
在Mac或Linux上,你可以通过以下命令导航到该目录:
cd ~/.m2/repository/com/example/my-library/1.0.0
在Windows上,浏览到C:\Users\<你的用户名>\.m2\repository\com\example\my-library\1.0.0。
确认目录中有类似以下内容:
my-library-1.0.0.jar
my-library-1.0.0.pom
2.2 在Maven项目中使用私有JAR包
2.2.1 打开Maven项目
打开你需要在其中使用该私有JAR包的Maven项目。确保项目根目录有一个名为pom.xml的文件。
2.2.2 编辑pom.xml
在项目的pom.xml文件中,添加以下依赖配置:
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>my-library</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
你的pom.xml文件示例如下:
<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>com.example</groupId>
<artifactId>your-project</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>my-library</artifactId>
<version>1.0.0</version>
</dependency>
<!-- 其他依赖项 -->
</dependencies>
<!-- 其他配置项,如build/plugins等 -->
</project>
2.2.3 刷新项目(如果使用IDE)
- 如果你使用的是IDE,比如IntelliJ IDEA或Eclipse,刷新Maven项目以确保依赖已经更新。
- 在IntelliJ IDEA中,可以通过"右键点击项目 -> Maven -> Reimport"来刷新Maven项目。
- 在Eclipse中,可以通过"右键点击项目 -> Maven -> Update Project"来更新Maven项目。
2.2.4 构建项目
- 通过以下命令清理并构建项目,确保所有依赖都正确解析并下载到本地:
mvn clean install
不过这种的有时候还是不行。因为有时候,你的项目jar包版本太低,但是需要引入更高的。否则项目跑不起来,一般问题报错是找不到某个类。这时候你需要反编译看一下你项目中的版本和你在仓库中看到的高版本里面那个有报错找不到的类。一般都是高版本里面有报错说的类。低版本没有这时候我们需要引入高版本。
似乎到这就可以了,但是有一些项目有些问题。现在的项目大多数都是微服务项目,有父模块和子模块区别,一般父模块声明,统一管理,子模块引入jar。这时候有的项目里面会有问题。正常父模块里面会有下面中的内容。
<dependencyManagement>
<dependencies>
</dependencies>
</dependencyManagement>
<dependencies>
</dependencies>
一般在父模块中同一个pom中,他们的区别是,第一个是当仓库中有多个版本,强行用你指定的版本。第二个是项目引入jar包版本。
但是个别项目中因为种种原因,子模块也会有dependencyManagement标签,你要没有认真看,将jar包依赖放入到dependencyManagement中,你会发现jar包一直引入不进来。这时候你放入到dependencies标签里面,jar包就能引入进来了。到这项目代码爆红就可以全部解决了。
还有一些其他的原因,代码可以看源码用其他包类替换掉。