Scala IDE运行Spark应用报错:找不到或无法加载主类
问题描述
我用Scala IDE(基于Eclipse)开发Spark应用时碰到个头疼的问题:直接在Eclipse里运行主类的时候,不仅没生成class文件,还抛出错误:
Error: Could not find or load main class
但用Maven构建项目的话,class文件能正常生成,程序也能在Eclipse里执行。可开发阶段每次都依赖Maven构建,效率实在太低了。
我的pom.xml配置如下:
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <encoding>UTF-8</encoding> <scala.tools.version>2.11</scala.tools.version> <scala.version>2.11.11</scala.version> </properties> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> </dependency> <!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.5</version> <scope>provided</scope> </dependency> <!-- <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.4</version> </dependency> --> </dependencies> <build> <!-- <sourceDirectory>src/main/scala</sourceDirectory> <testSourceDirectory>src/test/scala</testSourceDirectory> --> <plugins> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <executions> <execution> <id>scala-compile-first</id> <phase>process-resources</phase> <goals> <goal>add-source</goal> <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> <executions> <execution> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <!-- Additional configuration. --> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
我已经确认版本配置没问题(要是版本错了Maven构建肯定失败),项目目录结构也正常:
恳请各位提供解决思路。
解决思路分享
既然Maven能正常编译,说明代码和依赖本身没毛病,问题大概率出在Scala IDE的Eclipse插件编译配置或者项目同步上,给你几个实用的排查方向:
1. 检查自动编译与项目清理
- 先确认Eclipse的自动编译是否开启:点击顶部菜单
Project > Build Automatically,确保选项处于勾选状态。如果没开,手动按Ctrl+B(Windows/Linux)或Cmd+B(Mac)触发编译,看看能不能生成class文件。 - 要是自动编译开了还是不行,试试清理项目:
Project > Clean,选中你的项目后点击OK,让Eclipse彻底重新编译一次。
2. 验证Scala编译配置与源码目录
- 右键项目选择
Properties > Scala Compiler,检查这里的Scala版本是否和pom.xml里的2.11.11完全一致。有时候Maven导入项目后,Scala插件的版本可能没同步到位。 - 再看
Properties > Java Build Path的Source标签页,确认src/main/scala和src/test/scala都被标记为源码目录(会显示蓝色的源码图标)。你pom里注释了sourceDirectory配置,但Eclipse里得确保源码目录被正确识别。
3. 同步Maven与Eclipse项目配置
- 右键项目选择
Maven > Update Project,勾选Force Update of Snapshots/Releases后点击OK。这一步会让Eclipse重新读取pom.xml的配置,同步依赖和编译规则。 - 如果还是没效果,考虑重新导入项目:先把项目从Eclipse中移除(不要删除本地文件),再通过
File > Import > Maven > Existing Maven Projects重新导入,让Scala IDE重新初始化项目配置。
4. 检查Scala IDE插件状态
- 确认Scala IDE插件版本和Scala 2.11兼容:Scala 2.11对应的Scala IDE版本一般是4.x系列(比如4.7.0左右),可以在
Help > About Eclipse > Installation Details里查看插件版本,要是不兼容,去Eclipse Marketplace更新或重装合适的插件。 - 偶尔插件会出缓存bug,试试用
eclipse -clean命令启动Eclipse,清理插件缓存后再试。
5. 查看Eclipse错误日志找细节
- 打开
Window > Show View > Other > General > Error Log,看看有没有更详细的编译错误信息。找不到主类往往是表面现象,日志里可能会藏着Scala编译失败的具体原因(比如隐性依赖缺失、语法问题等)。
内容的提问来源于stack exchange,提问作者Y0gesh Gupta
相关产品推荐
相关产品推荐

