【发布时间】: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->Compile 或 Build->Make Project 菜单)或“Make”,当我反编译该编译的 .class 产品时,它永远不会反映最后的更改我只做了最后一个maven clean compile 或Build->Rebuildproject 编译产品。
我什至尝试在启动单个类编译之前删除已编译的类,但它仍然是相同的行为。另外,当我启动“单类编译”时,它会将正在编译的 .java 文件复制到模块的目标目录中。
每当我进行更改时编译整个项目需要很长时间才能被视为可行的替代方案。
如何编译更改后的类?任何帮助将不胜感激。
编辑:我反编译了我编译的单元测试类,它与源目录中的版本有所不同。当我启动单元测试时,我还检查了类路径,MODULE_PATH/target/test-classes 和 MODULE_PATH/target/classes 都是其中的一部分。因此单元测试是在目标中使用已编译的类启动的。
【问题讨论】:
-
你的类是从编译后的 jar 中加载的吗?然后在 IDEA 中编译单个类将永远无法工作。
-
使用
Build->Make project产生了相同的结果。我还尝试运行我正在使用-verbose:class选项更改的单元测试,以了解他在哪里选课。但它无法显示它(未找到确切的消息类:“XXX”),因为它不是 jar 的一部分。 -
我好像不明白你的设置。在 IDEA 中运行单元测试基本上总是有效的,尤其是在 Maven 之外。我认为你的设置并没有反映你的期望。如果您希望 IDEA 只编译一个类,但您的应用程序依赖于类路径(本地存储库)中的 JAR,那么您必须在编译单个类后重新打包 JAR。结果基本上必须是一样的。
-
我只更改了单元测试类。因此,当我从 IDE 启动它时,我希望运行的是更改后的单元测试。但事实并非如此。推出的是以前的版本。例如,我尝试添加一些日志,但未显示新日志,当我在日志行上放置断点并尝试单步执行代码时,它会将我带到一个断言。我检查了启动命令,我的类路径包含
MODULE_PATH/target/test-classes和MODULE_PATH/target/classes
标签: java maven intellij-idea