我有一个 Java 项目。
PS :在我的项目中,我在src/test/java中没有任何 java 程序/源代码。
- 此文件夹仅包含一个空白.txt 文件。
我有两个不同的 Gradle 版本:
Gradle 1.6 与 Java 7(因为 Java 8 与 Gradle 1.6 或任何版本不兼容,如果我是正确的,则小于 1.10 版本)。
另一个版本是:带有 Java 8 的 Gradle 2.3。
使用上述两个 Gradle 1.6 + Java7 或Gradle 2.3 + Java 8 版本我的项目构建成功。
不过,我注意到一件事:在运行构建时,它会自动调用“测试”任务(根据 Gradle 设计,测试任务是免费运行的);我在 Gradle 1.6 + Java7 运行期间发现 --- 我看到以下输出。
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources
:testClasses
:test
:check
正如您会注意到的,它说我没有任何测试源代码(即 src/test/java 不包含任何源代码,或者这次Gradle 没有什么新东西可以编译可能自上次 gradle 运行以来没有任何变化构建),这就是为什么 compileTestJava 任务在它前面显示UP-TO-DATE的原因。
但是,:test任务显示它运行成功。我在 test { .. } 任务中使用了 jacoco (代码覆盖率)部分,然后它实际上运行了该部分(因为在test任务前面没有 UP-TO-DATE )。Jacoco 部分未在我的项目的 build.gradle 中定义,但实际上它来自顶级 / GRADLE_HOME/init.d/some-common-top-level.gradle 文件(其中 test { ... has jacoco { ... } .. } 部分)。
正如我上面提到的,测试任务没有说 UP-TO-DATE,因此,在 Gradle 构建过程完成后,我可以看到它在build/tmp/expandedArchives/org.jacoco 中创建了以下文件夹/文件结构... .文件夹:
$ ls -ltr build/tmp/expandedArchives/
total 4
drwxr-xr-x+ 1 e020001 Domain Users 0 Jul 7 20:45 org.jacoco.agent-0.7.2.201409121644.jar_778m6tp3jrtvcetasufl59dmau
$ ls -ltr build/tmp/expandedArchives/org.jacoco.agent-0.7.2.201409121644.jar_778m6tp3jrtvcetasufl59dmau/
total 272
drwxr-xr-x+ 1 e020001 Domain Users 0 Jul 7 20:58 META-INF
-rwxr-xr-x 1 e020001 Domain Users 2652 Jul 7 20:58 about.html
-rwxr-xr-x 1 e020001 Domain Users 272311 Jul 7 20:58 jacocoagent.jar
drwxr-xr-x+ 1 e020001 Domain Users 0 Jul 7 20:58 org
当我运行 Gradle 2.3 和 Java8 时,同样的情况不会发生。
构建成功,但我没有得到包含 jacocoagent.jar 文件的 build/tmp/expandedArchives/org.jacoco.... 文件夹。
任何想法,为什么 Gradle 2.3 没有创建这个 jacoco 特定的 .jar 文件。
对于 Gradle 2.3+Java8,以下输出在:compileTestJava和:test任务前面显示 UP-TO-DATE (对于测试任务的 Gradle 1.6 不是这种情况)。
我跑了“ gradle clean build ”。
:compileTestJava UP-TO-DATE
:compileTestGroovy UP-TO-DATE
:processTestResources
:testClasses
:test UP-TO-DATE
:check
我需要 Gradle 2.3 在 build/tmp/expandedArchives/org.jacoco..... 文件夹下生成这个 jacocoagent.jar 以便我可以在下游 Jenkins 作业(运行非单元测试)中使用它,因为这个项目确实有一些集成测试,我在下游作业中从父主构建作业(运行gradle clean build包括测试任务)中获取 jacocoagent.jar,以便我可以在启动 Tomcat 时将其传递给 TOMCAT JVM(这样我就可以获得 jacocoIT IT 测试的 .exec 代码覆盖率)。但是,在我切换到 Gradle 2.3 之后,我没有 src/test/java 的所有项目......现在没有创建 jacocoagent.jar 并且复制工件插件在尝试从父作业复制 .jar 文件时失败.
还有一点:
使用 Gradle 1.6 + Java7,如果我运行gradle clean build,它会在 build/tmp/expandedArchives/org.jacoco..... 文件夹中成功创建 jacocoagent.jar ,但只有在我运行时才能以这种方式工作gradle clean build或“ gradle clean; gradle test ”。
如果我运行 gradle clean build,然后删除 build/tmp 文件夹,现在只运行:gradle test ,它会在:compileTestJava和:test任务前面显示我 UP-TO-DATE并且不会创建 build/tmp/ expandArchives/org.jacoco.... 包含 jacocoagent.jar 文件的文件夹。
有关更多信息,我在运行Gradle 1.6 + java 7的gradle 测试任务时附加了配置文件运行(即使用--profile选项) 。
我看到,在配置文件html文件中,当测试任务运行时,它首先根据 Gradle 流程逻辑调用 compileJava,然后是测试任务,它还调用depedencies --- :jacocoAgent(根据依赖项解析选项卡):
但是,
使用 Gradle 2.3 + Java8,依赖关系解析/顺序和任务执行步骤是不同的(或与 Gradle 1.6 相比的顺序),用于生成或显示对 jacocoAgent 依赖项的任何引用,因为它甚至没有调用它。
使用-i(或--info )选项运行Gradle1.6 +Java7 测试任务显示了即使我没有测试源代码,它也运行测试任务的原因,请参阅原因:
Note: Recompile with -Xlint:unchecked for details.
:processResources
Skipping task ':processResources' as it has no source files.
:processResources UP-TO-DATE
:classes
Skipping task ':classes' as it has no actions.
:compileTestJava
Skipping task ':compileTestJava' as it has no source files.
:compileTestJava UP-TO-DATE
:processTestResources
Executing task ':processTestResources' due to:
No history is available.
:testClasses
Skipping task ':testClasses' as it has no actions.
:test
file or directory '/my/workspace/project/build/classes/test', not found
Executing task ':test' due to:
No history is available.
file or directory '/my/workspace/project/build/classes/test', not found
Finished generating test XML results (0.001 secs)
Generating HTML test report...
Finished generating test html results (0.012 secs)
BUILD SUCCESSFUL