maven報錯:找不到符號

hackeruncle發表於2017-08-14

語言:和並用 
場景:存在java呼叫程式碼的情況 
maven版本:3.5.1 
IDE:IDEA 2017.1

maven報錯:找不到符號

並列出找不到的類或程式所在的程式包、位置

在一開始遇到maven問題時,網路上可以搜到的資料基本支援以下幾種情況: 
1.清理cache 
使用mvn clean命令清理 
使用IDEA裡面的Invalid Cache清理 

2.編碼格式不統一 
在pom.xml中將compiler的編碼格式設為UTF-8

點選(此處)摺疊或開啟

  1. <plugin>
  2.         <groupId>org.apache.maven.plugins</groupId>
  3.         <artifactId>maven-compiler-plugin</artifactId>
  4.         <version>3.5.1</version>
  5.         <configuration>
  6.           <source>1.8</source>
  7.           <target>1.8</target>
  8.           <encoding>UTF-8</encoding>
  9.         </configuration>
  10. </plugin>
		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3.IDE和專案本身的jdk版本不統一 
檢查IDE編譯使用的jdk版本和在pom.xml中配置的jdk版本是否統一 

4.pom的依賴問題
以上4種情況的解決方法,詳細可參考 http://blog.csdn.net/u012062455/article/details/52347099

上述問題是在網路中搜尋得到的主要幾種情況,但和我的情況均不相符,無法解決我的問題。

對錯誤進行定位後,我發現,專案中的scala程式碼和java程式碼均可以正常單獨編譯,但同時編譯會報錯。首先,排除了程式碼位於不同包的情況的影響;進一步定位後發現,錯誤出現在,使用java程式碼呼叫scala程式碼時,也就是說,我在java程式碼中,只要import了scala的類,就會報錯。

原因定位後,在stackoverflow的一個不太相關的問題的評論中看到了這樣一句話,大意是,若在java程式碼中呼叫了scala程式碼,則需先編譯scala程式碼,後編譯java程式碼。

這句話以後,茅塞頓開,現給出兩種解決方法:

  • 使用mvn命令控制編譯順序
  • 點選(此處)摺疊或開啟

    1. mvn clean scala:compile compile
						
  • 1
  • 在pom.xml裡面配置編譯順序 
    這部分我研究不深,因此只給出一個成功的配置方案。

  • 點選(此處)摺疊或開啟

    1.       <plugin>
    2.         <groupId>org.scala-tools</groupId>
    3.         <artifactId>maven-scala-plugin</artifactId>
    4.         <version>2.15.1</version>
    5.         <executions>
    6.           <execution>
    7.             <id>scala-compile</id>
    8.             <phase>process-resources</phase>
    9.             <goals>
    10.               <goal>compile</goal>
    11.             </goals>
    12.           </execution>
    13.           <execution>
    14.             <id>scala-test-compile</id>
    15.             <phase>process-test-resources</phase>
    16.             <goals>
    17.               <goal>testCompile</goal>
    18.             </goals>
    19.           </execution>
    20.         </executions>
    21.       </plugin>
    22.       <plugin>
    23.         <groupId>org.apache.maven.plugins</groupId>
    24.         <artifactId>maven-compiler-plugin</artifactId>
    25.         <version>3.5.1</version>
    26.         <configuration>
    27.           <source>1.8</source>
    28.           <target>1.8</target>
    29.           <encoding>UTF-8</encoding>
    30.         </configuration>
    31.       </plugin>
    32.       <plugin>
    33.         <groupId>org.apache.maven.plugins</groupId>
    34.         <artifactId>maven-jar-plugin</artifactId>
    35.         <configuration>
    36.           <source>1.8</source>
    37.           <target>1.8</target>
    38.           <encoding>UTF-8</encoding>
    39.         </configuration>
    40.         <executions>
    41.           <execution>
    42.             <goals>
    43.               <goal>test-jar</goal>
    44.             </goals>
    45.           </execution>
    46.         </executions>
    47.       </plugin>
 以上兩種方法均可以編譯成功,解決以上maven報錯。

下面將敘述一個我比較困惑的情況,望不吝解答。 
我將列出一個pom.xml的示例,裡面也有配置scala-compile的順序,使用scala-compile-first這樣的字樣進行控制。 
但該配置,在實際使用中,在工程1裡可行,但工程2裡會報錯,然而我兩個工程裡的配置,順序幾乎放的一樣,只不過工程2中可能多引入了很多dependency,配置如下:

這是我失敗情況的配置,不要使用。


這裡的scala-compile-first起到的是什麼作用,為什麼失效了呢?

在找到問題所在之後,再進行搜尋,發現已有文件提出,若使用java呼叫scala,需要先編譯scala的情況,比如http://www.cnblogs.com/yako/p/5730552.html

由此可見,對於自己需要查詢的問題, 關鍵詞總結的本領,還要繼續加強。

@轉載: http://blog.csdn.net/ilvchocolate/article/details/75626921

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30089851/viewspace-2143510/,如需轉載,請註明出處,否則將追究法律責任。

相關文章