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 jenkinsci-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/6878cddc-02b1-4d51-9412-45534abc0cd9n%40googlegroups.com.