Maven 常用插件 & 常见问题

240 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Maven 常用插件

修改使用的 JDK 版本

Maven 工程默认使用 JDK1.5, 可以根据需要可以设置为 JDK1.8.

  • 可以只指定当前项目的版本 :
<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>
  • 也可以设置所有项目的版本.

在 conf / setting.xml 文件.  找到大约 195 行的 profiles 标签. 添加如下配置.

<profiles>
  <profile>
    <id>jdk-1.8</id>
    <activation>
      <activeByDefault>true</activeByDefault>
      <jdk>1.8</jdk>
    </activation>
    <properties>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
      <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
  </profile>
</profiles>

打包配置文件

  • 遇到问题 :  maven clean package 打 war 包正常, 不报错. 但是 war 包会丢失 src/main/resources 目录下所有 xml 和 properties 文件.
  • 产生原因 :  maven 默认不会打包项目 src 下的 xml 和 properties 等配置文件.
  • 解决方法 :  需要在 pom.xml 的 <build> 节点下添加配置.
<resources>  
  <resource>  
    <directory>src/main/java</directory>  
    <includes>  
      <include>**/*.properties</include>  
      <include>**/*.xml</include>  
    </includes>  
    <!-- 是否替换资源中的属性-->  
    <filtering>false</filtering>  
  </resource>  
  <resource>  
    <directory>src/main/resources</directory>  
    <includes>
      <include>**/*.properties</include>  
      <include>**/*.xml</include>
    </includes>
    <!-- 是否替换资源中的属性-->  
    <filtering>false</filtering>  
  </resource>  
</resources>

以 UTF-8 格式打包文件

添加配置如下 :

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

编译插件 端口运行插件

指定运行端口 :

<build>           
  <plugins>                
    <!-- Java编译插件 -->                
    <plugin>                     
      <groupId>org.apache.maven.plugins</groupId>                   	
      <artifactId>maven-compiler-plugin</artifactId>                     
      <version>2.2</version>                     
      <configuration>                           
        <source>1.8</source>                           
        <target>1.8</target>                           
        <encoding>UTF-8</encoding>                     
      </configuration>                
    </plugin>                
    <!-- 端口运行插件 -->                
    <plugin>                    
      <groupId>org.apache.tomcat.maven</groupId>                    
      <artifactId>tomcat7-maven-plugin</artifactId>                   
      <version>2.2</version>                    
      <configuration>                        
        <port>8080</port>                        
        <path>/</path>                    
      </configuration>                
    </plugin>           
  </plugins>     
</build>

编译插件

bug现象:每次修改 pom 之后,idea 自动扫描一遍,然后发现默认的 compile 级别跳到 5.0. 每次手动去setting里修改compile很费事.

引入插件 :

<build>
  <plugins>
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.5.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
  </plugins>
</build>

Maven 常见问题

更改 Maven 项目名

① 在 Eclipse 中更改

  • 项目已经导入到 Eclipse.
  • 修改项目文件夹名称.    选中项目 , 右键 , 改名.
  • 修改项目组件名称.    选中项目, 右键选择 Properties, 选中 Web Project Settings, 在 Context root 输入要更改的项目名即可.

② 手动更改

  • 这种做法最终也能实现改项目名的效果, 只是把  Eclipse 做的工作自己手工完成了。
  • 修改项目配置. 找到项目文件夹, 打开 .settings 文件夹, 找到 org.eclipse.wst.common.component 文件, 文件结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
  <wb-module deploy-name="xxx">
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
    <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
    <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
    <property name="context-root" value="xxx"/>
    <property name="java-output-path" value="/xxx/target/classes"/>
  </wb-module>
</project-modules>
  • 把文件内的 xxx 全部改为想改的名称, 比如 yyy.
  • 更改 pom.xml 配置. 打开 pom.xml 文件, 修改以下三项配置, xxx 就是原项目名.
<artifactId>xxx</artifactId>
<name>xxx Maven Webapp</name>
<finalName>xxx</finalName>

Maven 在 Update Project 时报错

在 项目上右键 -> Maven -> Update Project 的时候, 报错:  maven  Could not update project SpringBoot-4 configuration java.lang.NullPointerException.

使用的是 Eclipse + Maven.

解决办法 : StackOverFlow 上的解决方案

具体步骤:

  • 从 Eclipse 中删除这个项目, 但不要从磁盘中删除;
  • 关闭 Eclipse;
  • 删除项目目录下的 .settings 目录.
  • 删除项目目录下的 .projects 目录.
  • 删除项目目录下的 .metadata 目录.
  • 重启 Eclipse.
  • 导入项目, 并且在导入窗口选择 “Existing Maven Project”.

问题顺利的解决, 我的项目中本地目录没有后边两个, 只删掉 .settings 就生效了.

idea 多 module, module 在 install 时候提示 Could not resolve dependencies for project

ts_parent 项目下有三个 module, 分别是 ts_base, ts_common 和 ts_eureka_server. 其中 ts_base 依赖 ts_common, ts_common 在 mvn  install 时正常, ts_base 在 mvn package 的时候, 提示入戏 :

Could not resolve dependencies for project com.ts:ts-base:jar:0.0.1-SNAPSHOT: Failed to collect dependencies at com.fanxl:ts-common:jar:0.0.1-SNAPSHOT

解决办法, 在 ts_parent 上先 install 一下, 然后 install ts_common, 然后 package ts_bese.

\

Maven_报错element-only

引入依赖时报错如下:

images

报错原因:元素 dependency 排版问题,多加了几个空格。删除多余的空格,进行排版。

Maven 打包 class 注释

Maven 打包之后 class 文件中没有注释了,怎么设置可以让编译之后的 class 文件包含注释?

注释是代码的一部分,编译后就会干掉,如果要保留,使用如下方式:

  • 手动打包,那就用 javac -g:source 来编译
  • 如果是 maven,那就用 maven-source-plugin 这个插件