Maven使用中遇到的问题
- 1. 本地仓库有jar包,还去远程仓库下载
- 2. 指定依赖的范围
- 3. 在pom中添加第三方jar
- 4. scope=system,打jar包时打不进去
- 5. jar包运行时出现找不到主清单属性
- 6. 项目运行找不到资源文件
1. 本地仓库有jar包,还去远程仓库下载
删除maven本地仓库jar包目录下的_remote.repositories文件。因为此文件中缓存了maven远程仓
库的信息
2. 指定依赖的范围
依赖的范围,是用来控制三种 classpath 的关系(编译 classpath、测试 classpath 和运行 classpath)。
- compile:编译依赖,默认使用。对编译、测试、运行三种 classpath 都有效。
- test:测试依赖。只对测试 classpath 有效,在编译或运行项目的时候,这种依赖是无效的。
- provided:已提供依赖。只在编译和测试的时候有效,运行项目的时候是无效的。比如 Web 应用中的 servlet-api,编译和测试的时候就需要该依赖,运行的时候,因为容器中自带了 servlet-api,就没必要使用了。如果使用了,反而有可能出现版本不一致的冲突。
- runtime:运行时依赖。只对测试和运行有效,但在编译时是无效的。比如 JDBC 驱动实现类,就需要在运行测试和运行主代码时候使用,编译的时候,只需 JDBC 接口就行。
- system:系统依赖。使用system时,必须通过 systemPath 指定依赖文件的路径。因为该依赖不是通过 Maven 仓库解析的,建议谨慎使用。
3. 在pom中添加第三方jar
将需要使用的第三方jar包复制到项目的libs文件夹下,在pom.xml中添加如下配置
<dependency>
<groupId>com.xxx</groupId>
<artifactId>xxx</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/xxx.jar</systemPath>
</dependency>
${project.basedir} 表示pom.xml所在的位置
4. scope=system,打jar包时打不进去
在maven插件中添加includeSystemScope为true的配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
# 解决scope=system,打jar包时打不进去的问题
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
5. jar包运行时出现找不到主清单属性
在maven插件中添加执行目标为repackage的配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
# 解决scope=system,打jar包时打不进去的问题
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
# 解决jar包运行时出现找不到主清单属性的问题
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
6. 项目运行找不到资源文件
在pom文件中配置resources标签,打包时将资源文件也打包进去
<build>
<resources>
<!--将src/main/java目录下的所有yml文件都作为项目的资源文件,
项目打包的时候也会打包进去
-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.yml</include>
</includes>
</resource>
<!--将项目的src/main/resources目录下的所有文件都作为项目的资源文件
项目打包的时候也会打包进去
-->
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>