maven使用杂记
为maven的编译、运行指定不同的jdk,有两种方式
参考:Compiling Sources Using A Different JDK
-
最好的就是用Toolchainstool 插件,这个插件可以为包括compiler在内的其他诸多插件制定jdk版本,以及其他工具的版本(如果这些插件需要使用的话)。具体参考:Guide to Using Toolchains
-
其次是在maven-compiler-plugin插件中做配置,如下:
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<executable><!-- path-to-javac --></executable>
<compilerVersion>1.3</compilerVersion>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>
- 还有一种不太推荐的做法,这种做法不指定具体的编译器,而是开启交叉编译。采用这种方式只需要给编译器javac传入-source参数和-target参数。但是这种做法不推荐使用,尤其是当源码是用来一些高版本的语法时,贸然交叉编译成低版本的字节码,可能会导致运行失败。
具体做法是配置compiler插件的source属性和target属性:
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>
查看已解析依赖
解析依赖的意思是确定所有的直接依赖和传递性依赖的最终版本,保证每个依赖都是唯一的。查看已解析依赖的命令是:
mvn dependency:list
查看项目依赖树
可以清晰地看到当前项目的依赖树是什么样的
mvn dependency:tree
分析依赖
分析依赖可以分析出哪些依赖是声明了但是没有使用到的,即多余声明;也可以分析出哪些依赖是直接使用到但是没有声明成直接依赖(而是通过依赖传递得到的)
mvn dependency:analyze
重点关注结果中的 Used undeclared dependencies 和 Unused declared dependencies 两部分内容。
需要注意的是,对于这样一类依赖,我们不应该简单地直接删除其声明,而是应该仔细分析。由于dependency:analyze只会分析编译主代码和测试代码需要用到的依赖,一些执行测试和运行时需要的依赖它就发现不了。比如spring-core和spring-beans是运行Spring Framework项目必要的类库,因此不应该删除依赖声明。当然,有时候确实能通过该信息找到一些没用的依赖,但一定要小心测试。