使用Maven出現的幾個問題小結

問題1:jar不下載或下載了但不能用

問題現象:

  1. 項目中使用了maven,而且搭建了nexus 私服。使用maven構建的項目下面都有一個pom.xml文件,裏面設置了該項目的依賴的jar包。第一次因爲沒有聯網或者nexus服務未啓動,導致下載jar失敗,以後依然下載失敗。
  2. 某jar已經下載了,但在pom.xml中配置時顯示不能找到jar

編譯的時候可能會報類似下面的錯誤

 

問題分析:

因爲第一次下載失敗時,會在repository 中生成對應jar包的lastUpdated文件,如xwork-core-2.1.6.jar.lastUpdated。因爲有這個lastUpdated文件,所以以後都不會真正下載xwork-core-2.1.6.jar了。

 

解決方案:

(1)把倉庫中的xxx.lastUpdated.xxx文件(基本都是xxx.jar.lastUpdated和xxx.pom.lastUpdated、xxx-lastUpdated.properties)全部刪除(可直接查找所有包含lastUpdated單詞的文件名),再運行maven命令,如mvn compile

(2)在使用maven命令時加上-U參數,就可以忽略xxx.lastUpdated.xxx,如mvn compile –U,或者在Eclipse插件下進行選擇。

問題2:java編譯版本的問題

問題現象:

在Eclipse中新建了一個Maven工程, 然後更改JDK版本爲1.6, 結果每次使用Maven > Update project的時候JDK版本都恢復成1.5。

原因分析:

Maven官方文檔有如下描述:

編譯器插件用來編譯項目的源文件.從3.0版本開始, 用來編譯Java源文件的默認編譯器是javax.tools.JavaCompiler (如果你是用的是java 1.7) . 如果你想強制性的讓插件使用javac,你必須配置插件選項 forceJavacCompilerUse.

 同時需要注意的是目前source選項和target 選項的默認設置都是1.5, 與運行Maven時的JDK版本無關.如果你想要改變這些默認設置, 可以參考 Setting the -source and -target of the Java Compiler中的描述來設置 source 和target 選項.

 

這是Maven已知的一個特性。除非在你的POM文件中顯示的指定一個版本,否則會使用編譯器默認的source/target版本1.5。主要還是在於Eclipse中Maven的集成方式起到了關鍵作用, 它會從POM文件中生成項目的.project,.classpath以及.settings, 因此除非POM文件指定了正確的JDK版本, 否則你每次更新項目配置的時候它都會重置到1.5版本。

 

解決方案:

在pom.xml文件中增加如下配置:

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

【提示】

maven-compiler-plugin 插件有對應的jdk版本要求:

maven-compiler-plugin版本

Jdk

2.5.2

1.5

3.1

1.6,1.7

另外,最好在全局settings.xml中設置指定maven中的jdk1.7的默認屬性配置:

<profile>   
    <id>jdk1.6</id>    
    <activation>   
        <activeByDefault>true</activeByDefault>    
        <jdk>1.7</jdk>   
    </activation>    
    <properties>   
        <maven.compiler.source>1.7</maven.compiler.source>    
        <maven.compiler.target>1.7</maven.compiler.target>    
        <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>   
    </properties>   
</profile>  

【提示】

上述全局修改後,以後再建立項目,默認就用jdk1.7的編譯版本了(覆蓋了默認值的jdk1.5)。

如果不是新建項目,那麼需要在POM.xml中覆蓋編譯版本。

 

Trick:關於maven中調試代碼

調試無法關聯源碼

相關資源下載爲:鏈接:https://pan.baidu.com/s/15sck7pWV18JUm80bV__BRg 
提取碼:4si5 

截圖有:

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章