找不到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 楼答案
我设法找出了这个问题的根源。我对应用程序的默认JVM参数进行了一些条件设置,这显然是错误的。所述过程在Gradle传递给JVM的参数中包含一个尾随字符
出于某种原因,在类似Unix的环境中运行时,它不太受欢迎,而在Windows主机上运行时却很好。我重新设计了arg设置的条件部分,一切都像一个符咒