testcontainers-java
testcontainers-java copied to clipboard
[Bug]: Compile errors with class annoteted with @CompileStatic
Module
Core
Testcontainers version
1.17.3
Using the latest Testcontainers version?
Yes
Host OS
Linux
Host Arch
x86_64
Docker version
Client: Docker Engine - Community
Version: 20.10.17
API version: 1.41
Go version: go1.17.11
Git commit: 100c701
Built: Mon Jun 6 23:02:57 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.17
API version: 1.41 (minimum version 1.12)
Go version: go1.17.11
Git commit: a89b842
Built: Mon Jun 6 23:01:03 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.7
GitCommit: 0197261a30bf81f1ee8e6a4dd2dea0ef95d67ccb
runc:
Version: 1.1.3
GitCommit: v1.1.3-0-g6724737
docker-init:
Version: 0.19.0
GitCommit: de40ad0
What happened?
I'm not sure if this is a problem on the testcontainers-java side or a specificity of the Groovy language. If this is not your problem, I apologise for the wasted time.
Anyway, I've noticed a problem when calling the GenericContainer.withNetworkMode()
method when it is called from a class, with the @CompileStatic
annotation, immediately after calling the GenericContainer.withCommand()
method. The compilation ends with an error as follows.
[Static type checking] - Cannot find matching method org.testcontainers.containers.GenericContainer#withNetworkMode(java.lang.String). Please check if the declared type is correct and if the method exists.
@ line 9, column 25.
def container = new GenericContainer(imageName)
The source of the problematic class is as follows:
import groovy.transform.CompileStatic
import org.testcontainers.containers.GenericContainer
import org.testcontainers.utility.DockerImageName
@CompileStatic
abstract class GenericContainerDriver {
GenericContainerDriver() {
def imageName = DockerImageName.parse('debian')
def container = new GenericContainer(imageName)
.withCommand('sleep', 'infinity') // after commenting out this line, the compilation succeeds
.withNetworkMode('host')
}
}
Relevant log output
$ ./gradlew assemble
> Task :compileGroovy FAILED
startup failed:
/tmp/stupid/src/main/groovy/GenericContainerDriver.groovy: 9: [Static type checking] - Cannot find matching method org.testcontainers.containers.GenericContainer#withNetworkMode(java.lang.String). Please check if the declared type is correct and if the method exists.
@ line 9, column 25.
def container = new GenericContainer(imageName)
^
1 error
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileGroovy'.
> Compilation failed; see the compiler error output for details.
* 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 2s
1 actionable task: 1 executed
Additional Information
Full example attached: stupid.tar.gz
Regards Piotr Minkina