maven报错:找不到符号

语言: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

由此可见,对于自己需要查找的问题, 关键词总结的本领,还要继续加强。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当使用Idea 2020.1版本创建Maven项目编译时出现不到符号错误时,可能有几种原因导致。其中一种可能是由于私人仓库中缺少所需的软件包。如果这个软件包是自己编写的jar包,需要将其安装到私人仓库中。另一种可能是pom.xml文件中的Java编译插件与项目版本不匹配,需要将插件配置中的JDK版本修改为与项目版本相同,并将其安装到私人仓库中。最后一种可能是私人仓库中仍然存在旧版本的软件包,需要进入仓库目录删除旧版本后重新执行maven install命令。确保私人仓库中没有修改之前的版本。 若出现这个问题,你可以按照以下步骤进行解决: 1. 检查私人仓库中是否缺少所需的软件包。如果是自己编写的jar包,需要使用maven install命令将其安装到私人仓库中。 2. 检查pom.xml文件中的Java编译插件配置,确保与项目版本一致。修改插件配置中的JDK版本,然后使用maven install命令将其安装到私人仓库中。 3. 如果发现私人仓库中存在旧版本的软件包,进入仓库目录删除旧版本后重新执行maven install命令。同时,也建议将项目的打包文件全部删除后重新执行maven install命令,以确保私人仓库中没有修改之前的版本。 通过以上步骤,你应该能够解决maven报错不到符号的问题。希望对你有帮助!<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [idea2020.1踩坑:不到程序包和符号(冷门解决)](https://download.csdn.net/download/weixin_38621312/14043828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [关于maven编译错误不到符号问题的总结](https://blog.csdn.net/IManiy/article/details/81490634)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值