有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

找不到GitLab CI main方法上的java Gradle任务失败

我正在为一个项目建立一个新的GitLab CI管道

首先,我的目标是创建一个构建、测试和分析项目的基本管道(3个简单阶段)

我的问题是,我的第二阶段(测试)依赖于一个Gradle任务,该任务会生成一些文档(我们根据测试生成动态文档)。该任务调用实用程序的main来生成一个简单的文档

当我在Windows主机下运行所有任务时,它们都可以正常工作,但在GitLab的CI上使用基于Alpine Linux的映像执行同样的操作失败,错误如下:

> Task :compileTestJava
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

> Task :processTestResources NO-SOURCE
> Task :testClasses
> Task :test

> Task :generatePermissionsDocument FAILED
Error: Could not find or load main class 

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':generatePermissionsDocument'.

> Process 'command '/opt/java/openjdk/bin/java'' finished with non-zero exit value 1

我曾尝试启用Gradle stacktraces,但未能从中获得任何好信息。在大多数情况下,我的构建脚本和GitLab CI脚本看起来都正常(包括以下内容以供参考):

image: adoptopenjdk/openjdk8:jdk8u222-b10-alpine

include:
  - project: "devops/ci-templates"
    ref: "master"
    file: "sonar/sonar-gradle.yml"

variables:
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"

before_script:
  - export GRADLE_USER_HOME=`pwd`/.gradle
  - apk add --no-cache tzdata
  - cp /usr/share/zoneinfo/America/New_York /etc/localtime
  - echo "America/New_York" > /etc/timezone

stages:
  - build
  - test
  - analysis

build:
  stage: build
  script: ./gradlew --build-cache clean assemble -PMARKETING_SKIP_INT_TESTS
  cache:
    key: "$CI_COMMIT_REF_NAME"
    paths:
      - build
      - .gradle
      - src/main/java/fts/marketing/util/Version.java
  retry: 2
  only:
    - merge_requests
    - master
    - /^support\/\d+[.]\d+$/
    - tags
  except:
    - api

test:
  stage: test
  script: ./gradlew test -PMARKETING_SKIP_INT_TESTS --stacktrace
  cache:
    key: "$CI_COMMIT_REF_NAME"
    policy: pull
    paths:
      - build
      - .gradle
      - src/main/java/fts/marketing/util/Version.java
  only:
    - merge_requests
    - master
    - /^support\/\d+[.]\d+$/
    - tags
  except:
    - api

起初我认为这可能是一个缓存或权限相关的问题,但我检查了构建任务生成的完整性或缓存,以及生成的文件夹的权限,一切看起来都很好

作为参考,我试图调用的任务如下:

task generatePermissionsDocument(type: JavaExec, group: 'application') {
    description = 'Will generate API Permissions adoc'
    main = 'fts.marketing.tools.GeneratePermissionsDocument'
    classpath = sourceSets.main.runtimeClasspath
    //jvmArgs = applicationDefaultJvmArgs
    workingDir = generatedDocumentation
}

有人能解释一下为什么这是失败的,以及必须采取什么措施来解决它吗


共 (1) 个答案

  1. # 1 楼答案

    我设法找出了这个问题的根源。我对应用程序的默认JVM参数进行了一些条件设置,这显然是错误的。所述过程在Gradle传递给JVM的参数中包含一个尾随字符

    出于某种原因,在类似Unix的环境中运行时,它不太受欢迎,而在Windows主机上运行时却很好。我重新设计了arg设置的条件部分,一切都像一个符咒