maven报错:找不到符号
来源:互联网 发布:lol鼠标宏编程走a设置 编辑:程序博客网 时间:2024/06/05 05:18
语言:java和scala并用
场景:存在java调用scala代码的情况
maven版本:3.5.1
IDE:IDEA 2017.1
maven报错:找不到符号
并列出找不到的类或程序所在的程序包、位置
在一开始遇到maven问题时,网路上可以搜到的资料基本支持以下几种情况:
1.清理cache
- 使用mvn clean命令清理
- 使用IDEA里面的Invalid Cache清理
2.编码格式不统一
- 在pom.xml中将compiler的编码格式设为UTF-8
<plugin> <groupId>org.apache.maven.plugins</groupId> <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>
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命令控制编译顺序
mvn clean scala:compile compile
- 在pom.xml里面配置编译顺序
这部分我研究不深,因此只给出一个成功的配置方案。
<plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.15.1</version> <executions> <execution> <id>scala-compile</id> <phase>process-resources</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>scala-test-compile</id> <phase>process-test-resources</phase> <goals> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <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> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> <executions> <execution> <goals> <goal>test-jar</goal> </goals> </execution> </executions> </plugin>
以上两种方法均可以编译成功,解决以上maven报错。
下面将叙述一个我比较困惑的情况,望不吝解答。
我将列出一个pom.xml的示例,里面也有配置scala-compile的顺序,使用scala-compile-first这样的字样进行控制。
但该配置,在实际使用中,在工程1里可行,但工程2里会报错,然而我两个工程里的配置,顺序几乎放的一样,只不过工程2中可能多引入了很多dependency,配置如下:
这是我失败情况的配置,不要使用。
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <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> <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.15.1</version> <executions> <execution> <id>scala-compile-first</id> <phase>process-resources</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>compile-scala</id> <goals> <goal>add-source</goal> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile-scala</id> <goals> <goal>add-source</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> </plugins>
这里的scala-compile-first起到的是什么作用,为什么失效了呢?
在找到问题所在之后,再进行搜索,发现已有文档提出,若使用java调用scala,需要先编译scala的情况,比如http://www.cnblogs.com/yako/p/5730552.html。
由此可见,对于自己需要查找的问题, 关键词总结的本领,还要继续加强。
- maven报错:找不到符号
- Maven编译项目报错:某些类找不到符号
- intellj maven package 报错 程序包不存在 找不到符号 解决办法
- Maven报错,找不到符号或者相关jar包
- maven compile install多项目打包报错...符号: ....类 位置....: 程序包找不到符号
- maven 找不到符号 或者总是报编译错误
- 编译报错+解决方法:错误: 找不到符号
- Maven 错误找不到符号
- maven 找不到符号
- maven项目报错:找不到编译器
- maven assembly报错找不到配置描述
- maven 错误找不到符号 解决办法
- 解决android生成doc文档,找不到符号报错问题
- java第二天--cmd编译报错:找不到符号 问题解决
- 使用android的系统API报错:找不到符号
- 编译java代码时,报错:找不到符号
- as 报错 Error:(303, 27) 错误: 找不到符号 符号: 方法 sin(float) 位置: 类 FloatMath
- AS 报错 Error:(303, 27) 错误: 找不到符号 符号: 方法 sin(float) 位置: 类 FloatMath
- 普元 EOS Platform 7.2开发环境生成webservice客户端代码调用BPS发布的服务,报错
- SSH Web Demo Spring 配置 AOP
- python game1
- 重载和重写(覆盖)
- [云框架]SMACK大数据架构
- maven报错:找不到符号
- instant run requires tools
- Js 操作json
- Freescale i.MX 6Q平台移植Android MNC
- Intellij IDEA 快捷键大全
- 进程 终端 的联系
- TTEFS_User 应用层透明加密开发控件
- spring学习之---使用spring容器
- java.lang.NoClassDefFoundError错误