ITPub博客

首页 > 大数据 > 数据分析 > maven报错:找不到符号

maven报错:找不到符号

数据分析 作者:hackeruncle 时间:2017-08-14 18:46:01 0 删除 编辑

语言:和并用 
场景:存在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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
主要从事大数据平台产品的技术工作; 负责基于Spark、Flink生产开发及性能调优; 负责对公司的集群的部署、监控、调优和运营; 主导我司的数据平台0到1及实时中间件项目开发; 此外,精通Java、Shell、Python编程; 且荣获2016年IBM的Spark大赛全球第四名,中国区域第一名。

注册时间:2015-01-03

  • 博文量
    187
  • 访问量
    351038