【问题标题】:Intellij single class compilation does not reflect .java file stateIntellij 单类编译不反映 .java 文件状态
【发布时间】:2014-09-11 11:54:01
【问题描述】:

我目前正在开发一个基于 Perforce 版本的 Intellij Idea 12 具有非常规结构的 maven 项目。

主源目录是模块根目录中的src,而不是src/main/java。位于模块根目录中 tests 目录中的测试源也一样,而不是 src/test/java

每当我创建maven clean compile 或使用Build->Rebuildproject 菜单时,我的所有更改都会反映出来。但是,如果我在运行单元测试之前尝试使用“单类编译”(Build->CompileBuild->Make Project 菜单)或“Make”,当我反编译该编译的 .class 产品时,它永远不会反映最后的更改我只做了最后一个maven clean compileBuild->Rebuildproject 编译产品。

我什至尝试在启动单个类编译之前删除已编译的类,但它仍然是相同的行为。另外,当我启动“单类编译”时,它会将正在编译的 .java 文件复制到模块的目标目录中。

每当我进行更改时编译整个项目需要很长时间才能被视为可行的替代方案。

如何编译更改后的类?任何帮助将不胜感激。

编辑:我反编译了我编译的单元测试类,它与源目录中的版本有所不同。当我启动单元测试时,我还检查了类路径,MODULE_PATH/target/test-classesMODULE_PATH/target/classes 都是其中的一部分。因此单元测试是在目标中使用已编译的类启动的。

【问题讨论】:

  • 你的类是从编译后的 jar 中加载的吗?然后在 IDEA 中编译单个类将永远无法工作。
  • 使用Build->Make project 产生了相同的结果。我还尝试运行我正在使用-verbose:class 选项更改的单元测试,以了解他在哪里选课。但它无法显示它(未找到确切的消息类:“XXX”),因为它不是 jar 的一部分。
  • 我好像不明白你的设置。在 IDEA 中运行单元测试基本上总是有效的,尤其是在 Maven 之外。我认为你的设置并没有反映你的期望。如果您希望 IDEA 只编译一个类,但您的应用程序依赖于类路径(本地存储库)中的 JAR,那么您必须在编译单个类后重新打包 JAR。结果基本上必须是一样的。
  • 我只更改了单元测试类。因此,当我从 IDE 启动它时,我希望运行的是更改后的单元测试。但事实并非如此。推出的是以前的版本。例如,我尝试添加一些日志,但未显示新日志,当我在日志行上放置断点并尝试单步执行代码时,它会将我带到一个断言。我检查了启动命令,我的类路径包含 MODULE_PATH/target/test-classesMODULE_PATH/target/classes

标签: java maven intellij-idea


【解决方案1】:

“非常规结构” - 我敢打赌那是你的问题。

没有看到您的项目就无法判断,但我可以假设您 IntelliJ IDEA 12 和 13 的行为都符合预期。你的假设没有得到满足;检查你的假设。

将 Maven 排除在外,并在没有它的情况下设置 IntelliJ。

【讨论】:

  • 您希望看到关于该项目的哪些内容可以为您提供更多信息?
  • 我正在查看项目配置。我建议你看一下,因为我今天不会有太多时间。
  • 我终于使缓存无效,删除项目设置并将项目重新导入为 maven 项目,最后,它工作了。我不知道发生了什么,无法重现。仍然有一个奇怪的行为,因为在构建项目时,一些 java 资源仍然被复制到 target 目录中。
猜你喜欢
  • 1970-01-01
  • 2015-04-07
  • 2013-04-12
  • 2016-11-19
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多