maven使用杂记

为maven的编译、运行指定不同的jdk,有两种方式

参考:Compiling Sources Using A Different JDK

  1. 最好的就是用Toolchainstool 插件,这个插件可以为包括compiler在内的其他诸多插件制定jdk版本,以及其他工具的版本(如果这些插件需要使用的话)。具体参考:Guide to Using Toolchains

  2. 其次是在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>
  1. 还有一种不太推荐的做法,这种做法不指定具体的编译器,而是开启交叉编译。采用这种方式只需要给编译器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 dependenciesUnused declared dependencies 两部分内容。

需要注意的是,对于这样一类依赖,我们不应该简单地直接删除其声明,而是应该仔细分析。由于dependency:analyze只会分析编译主代码和测试代码需要用到的依赖,一些执行测试和运行时需要的依赖它就发现不了。比如spring-core和spring-beans是运行Spring Framework项目必要的类库,因此不应该删除依赖声明。当然,有时候确实能通过该信息找到一些没用的依赖,但一定要小心测试。

posted on 2019-10-12 22:51  J.M.Liu  阅读(244)  评论(0编辑  收藏  举报