java 为什么Maven不能识别文件修改?(“没有要编译的内容-所有类都是最新的”错误)

bqujaahr  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(155)

我有一个Java + Maven的项目。我可以用IntelliJ编译和运行代码:我在代码中所做的每一个修改都会在程序中编译。然而,当我尝试从命令行编译(使用mvn compile)时,Maven无法识别代码中的更改,只是说“Nothing to compile - all classes are up to date”。我可以使用mvn clean强制重建,但这使构建系统的目的无效。为什么会这样,它如何检测代码中的更改?
例如,假设我有一个工作代码。
1.我做mvn compile。它工作得很好,我可以运行程序。
1.我更改了代码并引入了一个语法错误。我保存文件并执行mvn compile。输出为Nothing to compile,以及BUILD SUCCESS然而,当我尝试运行程序时,我得到一个Exception in thread "main" java.lang.Error: Unresolved compilation problems,沿着一系列错误(由于错误的解析)
1.如果我将代码更改为不同的代码,但语法上有效,我会得到相同的行为。
1.事实上,在此之后,甚至返回到我的原始代码编译,但随后抛出一个java.lang.Error异常!

为什么它是这样工作的,为什么它在IntelliJ中工作,而不是在终端?

编辑:IntelliJ未打开。但是,Emacs会启动语言服务器(jdtls)。
我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>it.polimi.middlewareB</groupId>
  <artifactId>akka_actors</artifactId>
  <packaging>jar</packaging>
  <version>0.1  </version>

  <properties>
    <akka.version>2.6.19</akka.version>
    <scala.binary.version>2.13</scala.binary.version>
  </properties>
  
  <name>akka_actors</name>
  <url>http://maven.apache.org</url>

  <dependencyManagement>
    <dependencies>
      <dependency>
    <groupId>com.typesafe.akka</groupId>
    <artifactId>akka-bom_${scala.binary.version}</artifactId>
    <version>2.6.19</version>
    <type>pom</type>
    <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  
  <dependencies>
    <dependency>
      <groupId>com.typesafe.akka</groupId>
      <artifactId>akka-actor-typed_2.13</artifactId>
      <version>${akka.version}</version>
    </dependency>
    <dependency>
      <groupId>com.typesafe.akka</groupId>
      <artifactId>akka-actor_${scala.binary.version}</artifactId>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>
    <dependency>
      <groupId>com.typesafe.akka</groupId>
      <artifactId>akka-actor-testkit-typed_2.13</artifactId>
      <version>${akka.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka-clients</artifactId>
      <version>3.2.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.17.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.17.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>2.17.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.12.6.1</version>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5.1</version>
    <configuration>
          <source>11</source>
          <target>11</target>
    </configuration>
      </plugin>
      <!-- <plugin> -->
      <!--   <groupId>org.codehaus.mojo</groupId> -->
      <!--   <artifactId>exec-maven-plugin</artifactId> -->
      <!--   <version>1.6.0</version> -->
      <!--   <configuration> -->
      <!--     <executable>java</executable> -->
      <!--     <arguments> -->
      <!--       <argument>-classpath</argument> -->
      <!--       <classpath /> -->
      <!--       <argument>com.example.AkkaQuickstart</argument> -->
      <!--     </arguments> -->
      <!--   </configuration> -->
      <!-- </plugin> -->
      <!-- <plugin> -->
      <!--   <groupId>org.codehaus.mojo</groupId> -->
      <!--   <artifactId>exec-maven-plugin</artifactId> -->
      <!--   <version>1.6.0</version> -->
      <!--   <executions> -->
      <!--     <execution> -->
      <!--       <id>default-cli</id> -->
      <!--       <configuration> -->
      <!--         <mainClass>com.example.AkkaQuickstart</mainClass> -->
      <!--       </configuration> -->
      <!--     </execution> -->
      <!--   </executions> -->
      <!-- </plugin> -->
    </plugins>
  </build>
</project>

mvn clean之后,这是mvn compile的输出:

[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------< it.polimi.middlewareB:akka_actors >------------------
[INFO] Building akka_actors 0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ akka_actors ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ akka_actors ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 15 source files to /home/alessandro/middleware/middleware_projectB/akka_actors/target/classes
[INFO] /home/alessandro/middleware/middleware_projectB/akka_actors/src/main/java/it/polimi/middlewareB/AlwaysSeekToBeginningListener.java: /home/alessandro/middleware/middleware_projectB/akka_actors/src/main/java/it/polimi/middlewareB/AlwaysSeekToBeginningListener.java uses unchecked or unsafe operations.
[INFO] /home/alessandro/middleware/middleware_projectB/akka_actors/src/main/java/it/polimi/middlewareB/AlwaysSeekToBeginningListener.java: Recompile with -Xlint:unchecked for details.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.471 s
[INFO] Finished at: 2022-07-13T10:36:08+02:00
[INFO] ------------------------------------------------------------------------

在主.java文件中添加一行代码,如下所示

public class ClusterStarter {
    private static final String kafkaDefaultArgument = "localhost:9092";
    private static final int actorPoolDefaultDimension = 3;
    apinaosncla aifasi; //NOTE HERE
    public static void main(String[] args) {
/* ... */
    }
}

启动mvn compile会得到:

[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------< it.polimi.middlewareB:akka_actors >------------------
[INFO] Building akka_actors 0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ akka_actors ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ akka_actors ---
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.970 s
[INFO] Finished at: 2022-07-13T10:43:07+02:00
[INFO] ------------------------------------------------------------------------

然而,首先给出mvn clean,然后给出mvn compile

[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------< it.polimi.middlewareB:akka_actors >------------------
[INFO] Building akka_actors 0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ akka_actors ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ akka_actors ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 15 source files to /home/alessandro/middleware/middleware_projectB/akka_actors/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /home/alessandro/middleware/middleware_projectB/akka_actors/src/main/java/it/polimi/middlewareB/ClusterStarter.java:[36,5] cannot find symbol
  symbol:   class apinaosncla
  location: class it.polimi.middlewareB.ClusterStarter
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.966 s
[INFO] Finished at: 2022-07-13T10:43:46+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project akka_actors: Compilation failure
[ERROR] /home/alessandro/middleware/middleware_projectB/akka_actors/src/main/java/it/polimi/middlewareB/ClusterStarter.java:[36,5] cannot find symbol
[ERROR]   symbol:   class apinaosncla
[ERROR]   location: class it.polimi.middlewareB.ClusterStarter
[ERROR] 
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

现在,回到工作代码,mvn compile仍然给出Nothing to compile,启动程序给出:

/path/to/project $ /usr/lib/jvm/java-11-openjdk/bin/java -Dfile.encoding=UTF-8 -classpath /home/alessandro/middleware/middleware_projectB/akka_actors/target/classes:/home/alessandro/.m2/repository/com/typesafe/akka/akka-actor-typed_2.13/2.6.19/akka-actor-typed_2.13-2.6.19.jar:/home/alessandro/.m2/repository/org/scala-lang/scala-library/2.13.8/scala-library-2.13.8.jar:/home/alessandro/.m2/repository/com/typesafe/akka/akka-slf4j_2.13/2.6.19/akka-slf4j_2.13-2.6.19.jar:/home/alessandro/.m2/repository/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar:/home/alessandro/.m2/repository/com/typesafe/akka/akka-actor_2.13/2.6.19/akka-actor_2.13-2.6.19.jar:/home/alessandro/.m2/repository/com/typesafe/config/1.4.2/config-1.4.2.jar:/home/alessandro/.m2/repository/org/scala-lang/modules/scala-java8-compat_2.13/1.0.0/scala-java8-compat_2.13-1.0.0.jar:/home/alessandro/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar:/home/alessandro/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar:/home/alessandro/.m2/repository/com/typesafe/akka/akka-actor-testkit-typed_2.13/2.6.19/akka-actor-testkit-typed_2.13-2.6.19.jar:/home/alessandro/.m2/repository/com/typesafe/akka/akka-testkit_2.13/2.6.19/akka-testkit_2.13-2.6.19.jar:/home/alessandro/.m2/repository/org/apache/kafka/kafka-clients/3.2.0/kafka-clients-3.2.0.jar:/home/alessandro/.m2/repository/com/github/luben/zstd-jni/1.5.2-1/zstd-jni-1.5.2-1.jar:/home/alessandro/.m2/repository/org/lz4/lz4-java/1.8.0/lz4-java-1.8.0.jar:/home/alessandro/.m2/repository/org/xerial/snappy/snappy-java/1.1.8.4/snappy-java-1.1.8.4.jar:/home/alessandro/.m2/repository/org/apache/logging/log4j/log4j-api/2.17.2/log4j-api-2.17.2.jar:/home/alessandro/.m2/repository/org/apache/logging/log4j/log4j-core/2.17.2/log4j-core-2.17.2.jar:/home/alessandro/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.17.2/log4j-slf4j-impl-2.17.2.jar:/home/alessandro/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar:/home/alessandro/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.12.6.1/jackson-databind-2.12.6.1.jar:/home/alessandro/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.12.6/jackson-annotations-2.12.6.jar:/home/alessandro/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.12.6/jackson-core-2.12.6.jar it.polimi.middlewareB.ClusterStarter
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    RetriesAnalysisActor cannot be resolved
    JobSupervisorActor cannot be resolved
    CompletedAnalysisThread cannot be resolved to a type
    PendingAnalysisThread cannot be resolved to a type

    at it.polimi.middlewareB.ClusterStarter.main(ClusterStarter.java:55)

(这些是我的项目的类)

nx7onnlm

nx7onnlm1#

你用的是什么IDE?我也有同样的问题,当我试图编译任何语法错误我的编译器没有停止建设项目,它显示建设成功,我正在使用STS IDE。解决我的问题的方法是我必须从IDE的项目选项卡中关闭我的自动构建选项。在那之后,每当我尝试使用命令行编译时,Maven编译器都会检测到更改的文件,如果检测到任何Java相关的错误,则会失败

相关问题