Maven搭建中的疑难杂症

1 在终端界面,使用mvn compile,无法成功构建
报错:

BUILD FAILURE
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] 不再支持源选项 1.5。请使用 1.6 或更高版本。
[ERROR] 不再支持目标选项 1.5。请使用 1.6 或更高版本。

查找原因可能是JDK版本问题,在pom.xml中配置JDK版本

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
	<java.version>9</java.version> //声明JDK版本
	<maven.compiler.source>9</maven.compiler.source>
	<maven.compiler.target>9</maven.compiler.target>
</properties>

2 配置好pom.xml后,mvn compile仍然出现Error

[ERROR]D:/IDEA文件/travel/src/main/java/cn/itcast/travel/util/MailUtils.java:[1,1] 非法字符: '\ufeff' 
[ERROR]/D:/IDEA文件/travel/src/main/java/cn/itcast/travel/util/MailUtils.java:[1,10] 需要class, interfaceenum [ERROR]

用txt记事本时,java文件保存格式为UTF-8,但是用notepad检查java文件的格式,发现是UTF-8-BOM:
Maven搭建中的疑难杂症_第1张图片
更改格式为UTF-8
Maven搭建中的疑难杂症_第2张图片
保存运行,即可解决问题。
3 运行Maven命令,下载时间过长,甚至有时出现中断
(1)在不配置镜像的情况下,maven默认会使用中央库.
(2)maven中央库在国外,有时候访问会很慢,尤其是下载较大的依赖的时候,有时候速度会很慢,甚至会出现无法下载的情况.
(3)为了解决依赖下载速度的问题,需要配置maven国内镜像
解决办法:
(1)可以直接在pom.xml中配置远程仓库,但是只是针对该项目,不推荐
(2)在Maven安装目录下,配置config/settings.xml文件
找到mirrors标签

  <mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
	  -->

添加阿里云为远程仓库:

<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
 </mirror>

注意:不要将mirror标签写入了注释内部,导致失效。
除了阿里云的远程仓库外,还有以下远程仓库可供参考。

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
 
<mirror>
    <id>ibiblio</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
    <id>jboss-public-repository-group</id>
    <mirrorOf>central</mirrorOf>
    <name>JBoss Public Repository Group</name>
    <url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
 
<mirror>
    <id>central</id>
    <name>Maven Repository Switchboard</name>
    <url>http://repo1.maven.org/maven2/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
<mirror>
    <id>repo2</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://repo2.maven.org/maven2/</url>
</mirror>

4 使用Idea,每次运行maven构建工程都报错
检查发现每次pom.xml都报红,发现是由于本地仓库配置仍采用默认仓库所导致。
选择File–>other settings–>default settings–>build,execution,deployment–>build tools–>maven,重新设置本地仓库即可。
Maven搭建中的疑难杂症_第3张图片5 IDEA执行maven命令控制台中文输出为乱码
查找:settings–>build,execution,deployment–>build tools–>maven–>runner
VM Options设置为:-Dfile.encoding=GB2312 即可
Maven搭建中的疑难杂症_第4张图片6 无法获取依赖,手动下载jar包,如何部署到本地仓库
将本地jar包放入本地仓库。只需执行如下命令即可:

mvn install:install-file -Dfile=D:/demo/fiber.jar -DgroupId=com.sure -DartifactId=fiber -Dversion=1.0 -Dpackaging=jar 

根据jar包的实际情况更改上述参数,打开本地maven仓库所在目录即可看到被添加的本地jar包。
7 使用maven自带tomcat引发的兼容性问题
maven中内嵌的是tomcat6,有可能会和JDK不相容。可以只用插件,使用tomcat7或更高版本。

<build>
        <!--maven插件-->
        <plugins>
            <!--jdk编译插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>
            <!--tomcat插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <!-- tomcat7的插件, 不同tomcat版本这个也不一样 -->
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <!-- 通过maven tomcat7:run运行项目时,访问项目的端口号 -->
                    <port>80</port>
                    <!-- 项目访问路径  本例:localhost:9090,  如果配置的aa, 则访问路径为localhost:9090/aa-->
                    <path>/travel</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

8 添加依赖时出现依赖冲突
可以在依赖中使用exclusions标签,去除冲突的依赖。

<dependency>
    <groupId>org.hibernate</groupId>
       <artifactId>hibernate-validator</artifactId>
    <version>5.1.3.Final</version>
    <exclusions>
        <exclusion>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

9 依赖已经导入,但无法导包
(1)导入依赖时,出现unknown红色告警。检查本地库,发现有unknown文件夹产生。删除unknown,重新导入,仍然显示unknown红色报警。
(2)再次删除unknown文件夹,选择手动部署jar包到文件夹,重新导入依赖。
(3)依赖不再显示红色告警,但是import导包却无法成功。
(4)检查项目的external library,显示包已经导入,但是查看maven projects中的依赖,无法点击查看子包。
(5)重启计算机,删除本地库依赖的文件夹,重新导包,成功。
10 Idea中无法使用switch case
检查IDEA的项目和模块SDK都是JDK1.5以上版本,但是swtich代码飘红,显示只支持byte,char,short和int类型。出现以上原因是因为使用了maven构建项目,而maven默认的JDK是1.5以下的版本。可以查看maven的settings配置文件,有如下的配置:

<profile>
      <id>jdk-1.4</id>
      <activation>
        <jdk>1.4</jdk>
      </activation>
</profile>

解决办法:
(1)先解决idea的问题,将项目和模块的SDK版本调整为1.5以上版本
(2)解决maven项目的问题
可以选择配置settings文件,永久更改JDK版本,如下:

<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>

或者临时更改当前maven项目的JDK版本,只需要添加如下依赖:

<build>  
	<plugins>  
		<plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-compiler-plugin</artifactId>  
            <version>3.1</version>  
            <configuration>
                 <source>1.8</source>  
                 <target>1.8</target>  
            </configuration>  
        </plugin>  
    </plugins>  
</build>

将maven中使用的JDK版本更改为IDEA使用的版本即可。

你可能感兴趣的:(Java)