I'm writing Jenkins pipeline code and have two similar Groovy files with
class definitions inside them. When I run a job using on Groovy file, the
job runs fine. When I run a similar job using the other Groovy file I get
an error.
Please let me explain.
I have the following file structure
com/company/versionmgrs/
/VersionDirector.groovy
/VersionBuilder.groovy
/PlatformVersionBuilder.groovy
Here are the contents of the above Groovy files, and the corresponding
`Jenkinsfile`s that instatiates them. As you can see, they're pretty
similar. Nothing magical, in all of them, the class name matches the Groovy
file name.
#VersionDirector.groovy
package com.company.versionmgrs
class VersionDirector {
VersionDirector(def file) {
this.file = file
}
def file
}
# Jenkinsfile
@Library("shared-lib) _
import com.company.versionmgrs.VersionDirector
node("build-node") {
def vd = new VersionDirector()
}
#VersionBuilder.groovy
package com.company.versionmgrs
abstract class VersionBuilder {
VersionBuilder(def file) {
this.file = file
}
def file
}
#PlatformVersionBuilder.groovy
package com.company.versionmgrs
class PlatformVersionBuilder extends VersionBuilder {
PlatformVersionBuilder(def file) {
this.file = file
}
def file
}
# Jenkinsfile
@Library("shared-lib) _
import com.company.versionmgrs.PlatformVersionBuilder
node("build-node") {
def builder = new PlatformVersionBuilder()
}
When I run the first Jenkinsfile that instantiates VersionDirector, I get
no error. But when I run the second Jenkinsfile that instantiates
PlatformVersionBuilder, I get the following error
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup
failed:
/var/jenkins_home/jobs/.../PlatformVersionBuilder.groovy: 3: Invalid
duplicate class definition of class
com.company.versionmgrs.PlatformVersionBuilder : The source
/var/jenkins_home/jobs/...PlatformVersionBuilder.groovy contains at least
two definitions of the class com.company.versionmgrs.PlatformVersionBuilder.
One of the classes is an explicit generated class using the class
statement, the other is a class generated from the script body based on the
file name. Solutions are to change the file name or to change the class
name.
@ line 3, column 1.
class PlatformVersionBuilder extends VersionBuilder {
^
I expect one job to pass, or fail, like the other. What am I missing? TIA
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/6878cddc-02b1-4d51-9412-45534abc0cd9n%40googlegroups.com.