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>