So I am fighting the very stupid cpp-application plugin for gradle.
It defines tasks that have dashes in the name, such as assembleReleaseX86-64
Thus breaking commands like: assembleReleaseX86-64.dependsOn setupJdk64
Is there any way I can reference this task? I have tried sourounding it in single and double quotes, but then gradle thinks I am referencing a string… (which makes sense).
Without seeing your build.gradle, I can only speculate.
It seems likely you defined something (a Variant?) named 'X86-64' (or maybe 'ReleaseX86-64') that the plugin is using to construct the task name. If so, then remove the hyphen from that name.
plugins {
id 'cpp-application'
//
id "de.undercouch.download" version "4.0.4"
}
application {
File jdk = new File(buildDir, 'jdk')
println new File(jdk, "include").getPath()
//cpp
baseName = "OutsideClient"
targetMachines = [
machines.windows.x86, machines.windows.x86_64,
]
binaries.configureEach(CppExecutable) {
// Define a preprocessor macro for every binary
compileTask.get().macros.put("NDEBUG", null)
// Define a compiler options
compileTask.get().compilerArgs.add '-W3'
// Define toolchain-specific compiler options
if (toolChain in VisualCpp) {
//==== Compiler
compileTask.get().compilerArgs.add('/Zi')
compileTask.get().compilerArgs.add('/D _CRT_SECURE_NO_WARNINGS')
compileTask.get().compilerArgs.add('-I' + new File(jdk, "include").getPath())
compileTask.get().compilerArgs.add('-I' + new File(jdk, "include/win32").getPath())
//==== Linker
linkTask.get().linkerArgs.add(new File(jdk, "lib/jvm.lib").getPath())
//Link DLL on demand in application. Allows launcher to select where the jre is at run time
linkTask.get().linkerArgs.add('/DELAYLOAD:jvm.dll')
linkTask.get().linkerArgs.add('Delayimp.lib')
//Hide console window
linkTask.get().linkerArgs.add('/SUBSYSTEM:windows')
linkTask.get().linkerArgs.add('/ENTRY:mainCRTStartup')
}
}
}
task setupJdk64() {
doLast {
File jvmZip = new File(buildDir, 'jdk64.zip');
download {
src 'https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.6%2B10/OpenJDK11U-jdk_x64_windows_hotspot_11.0.6_10.zip'
dest jvmZip
overwrite false
}
File jdkDir = new File(buildDir, 'jdk');
if (jdkDir.exists()) {
jdkDir.deleteDir()
}
copy {
from zipTree(jvmZip)
into jdkDir
}
File extracted = jdkDir.listFiles()[0] //Get the contents of the jvm folder that was created.
copy {
from extracted
into jdkDir
}
extracted.deleteDir()
jvmZip.delete()
}
}
task setupJdk32() {
doLast {
File jvmZip = new File(buildDir, 'jdk32.zip');
download {
src 'https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.6%2B10/OpenJDK11U-jdk_x86-32_windows_hotspot_11.0.6_10.zip'
dest jvmZip
overwrite false
}
File jdkDir = new File(buildDir, 'jdk');
if (jdkDir.exists()) {
jdkDir.deleteDir()
}
copy {
from zipTree(jvmZip)
into jdkDir
}
File extracted = jdkDir.listFiles()[0] //Get the contents of the jvm folder that was created.
copy {
from extracted
into jdkDir
}
extracted.deleteDir()
jvmZip.delete()
}
}
Right now I am just doing running: gradlew.bat setupJdk64 assembleReleaseX86-64
or gradlew.bat setupJdk32 assembleReleaseX86
depending on which release I want, but I would like it to auto run the correct setupJdk depending on which assembleRelease I run.
Hello @pspeed,
I believe it is a task, the cpp-application documentation is not very clear on how it works, but they call it a build variant: C++ Application
I attempted to access it with task('assembleReleaseX86-64)` as you recommended, but it seems to think that it means to create a new task.
I added this to the end of the gradle file:
tasks.forEach { t -> println t }
task('assembleReleaseX86-64').dependsOn(setupJdk64)
> Configure project :
C:\Users\tlfal_000\Desktop\outside\OutsideWindows\build\jdk\include
task ':assemble'
task ':build'
task ':buildEnvironment'
task ':check'
task ':clean'
task ':components'
task ':dependencies'
task ':dependencyInsight'
task ':dependentComponents'
task ':help'
task ':init'
task ':model'
task ':projects'
task ':properties'
task ':setupJdk32'
task ':setupJdk64'
task ':tasks'
task ':wrapper'
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring root project 'outside-windows'.
> Cannot add task 'assembleReleaseX86-64' as a task with that name already exists.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 17s
What is interesting to me is that the tasks do not show up. Compared to how the project looks in IDEA:
I’m not sure how these build variant tasks work, but I get the feeling that they are not like a normal task, yet I can run them from command line like they are.
I tried different version. I just bumped it to 5.6.1 no changes in the behavior of the plugin. It still creates the variant tasks with dashes in the name, making them impossible to access as far as I can tell.
Edit:
I tried it with your code and it didn’t work.
I also ran across a comment in a thread somewhere that said when they do things with hyphens in a task they are trying to force you into the command line use only.