Maven编译“找不到符号”

4
由于某些原因,这个命令在我的本地机器上运行良好:
mvn clean install -DskipTests=true -Psdk

然而,在Codeship上它不起作用,并抛出了"Cannot find symbol"错误。 在Codeship上完整的命令是:

jdk_switcher use oraclejdk8
echo $JAVA_HOME
mvn clean install -DskipTests=true -Psdk

在POM中,存储库包含以下内容:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

错误:

[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ client-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 65 source files to /home/rof/src/bitbucket.org/company/client-app/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /home/rof/src/bitbucket.org/company/client-app/src/main/java/com/client/rest/resources/MyResource.java:[3,61] cannot find symbol
symbol:   class MyEntity

1
我们需要看到完整的错误信息。 - JonK
1
你缺少一个依赖项或者你的代码有问题! - khmarbaise
我认为很明显:MyEntity 类没有包含在编译类路径中。 - m0skit0
有两种可能性:你在 MyResource 文件中没有导入 MyEntity 类,或者你的类路径中没有 MyEntity 类。 - Dawid Pura
除了Dawid和m0skit0提供的答案,您可以尝试在本地系统上使用相同的JDK进行编译。我意识到您的POM明确指出1.7,但是至少值得一试以排除这种可能性。我知道我过去曾经遇到过类似的问题。 - Jose Martinez
显示剩余3条评论
4个回答

6

您的Maven将Java版本读取为1.8,而pom.xml文件指定的版本是1.7。

请尝试安装所需版本。

如果已经安装,请检查$JAVA_HOME环境变量,它应该包含Java JDK 8的路径。如果找不到,请修复您的环境变量。

同时删除这些行。

 <fork>true</fork>
     <executable>${JAVA_1_8_HOME}/bin/javac</executable>

从pom.xml文件中


3
我曾遇到同样的问题。原因是其中一个类被使用在了……
src/main/java/

实际上,它存在于

src/test/java

那么你对此做了什么?如果你能提供你所采取的解决问题的方法,将会很有帮助。 - Abhijeet Vaikar
我改变了引用。 这个错误可能由多种原因引起。我的是这个。 你遇到了什么问题? - user4906240
类似的情况。我在src/main/java中有一个类,它使用了src/test/java中的一个类的引用。因此,当执行默认编译目标时,它无法在src/main/java中找到测试类。 - Abhijeet Vaikar
那么只需在Java包中创建该类,而不是测试类。 - user4906240

3
如果您已经正确导入了依赖项,那么可以尝试以下步骤。
首先尝试-
mvn clean
如果运行成功,然后尝试-
mvn install
如果这样可以正常工作,那么您可以尝试-
mvn compile
这个过程对我有效。

顺便提一下,这个问题可能由多种原因引起。 首先,可能是依赖关系的问题。 其次,可能是引用的问题。 等等。 如果所有问题都已解决,但仍然出现错误,则可以尝试上述过程。 - Pritom

0

我曾经遇到过类似的问题,但当我在POM中更改了Testng版本后,问题得到了解决。

<artifactId>testng</artifactId>
<version>6.9.8</version>       // Changed the version to 6.9.8
<scope>test</scope>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接