Nutch 1.14编译报错:ScoringFilter.java语法错误但对应行不存在
解决Nutch 1.14在RHEL6(Java 1.8)下编译报错行号不匹配的问题
我之前确实遇到过几乎一模一样的问题,大概率是Java版本环境不匹配+Maven编译插件配置问题导致的,给你几个实操性的解决方向:
先确认Maven实际使用的Java版本
RHEL6系统默认自带的是Java 1.6,哪怕你手动安装了Java 1.8,Maven也可能调用系统默认的低版本JDK。执行以下命令验证:mvn -v echo $JAVA_HOME如果输出的Java版本不是1.8,需要重新设置
JAVA_HOME并配置到环境变量中,比如:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.382.b05-1.el6_10.x86_64 export PATH=$JAVA_HOME/bin:$PATH可以把这两行加到
/root/.bashrc里,确保永久生效。强制指定Maven编译插件版本与Java版本
Nutch 1.14默认的maven-compiler-plugin版本可能对Java 8的语法支持不完善,或者编译时的source/target版本未正确设置。在项目根目录的pom.xml中添加或修改以下配置:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <!-- 这个版本对Java 8兼容性极佳 --> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <fork>true</fork> <!-- 强制使用指定的JDK编译 --> </configuration> </plugin> </plugins> </build>彻底清除编译缓存与损坏文件
除了删除/root/.m2/repository,还要彻底清理项目本地的编译产物:mvn clean rm -rf ./target如果还是不行,建议重新拉取Nutch 1.14的官方源码包,避免本地源码文件被意外修改或损坏(你提到的报错行号不存在,很大概率是旧编译缓存的行号残留)。
执行编译时务必带上clean步骤
不要直接执行mvn -X install,一定要先clean再编译:mvn -e clean install -X增量编译很容易导致行号不匹配的假报错,clean能彻底避免这个问题。
内容的提问来源于stack exchange,提问作者Quent
相关产品推荐
相关产品推荐

