Groovy Libraries allow custom Groovy functions and helpers to be shared and reused across all Groovy scripts in FlexDeploy
Table of Contents | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
This class is compiled once at server startup and then on each change of the library script it is recompiled.
Finally, when running a Groovy script, an instance of this library class is instantiated and made available to the script.
Importing Other Custom Libraries
Info |
---|
Importing other custom libraries is only supported in version 9.0.0.2+ |
Custom libraries are not made available in other custom libraries by default, however they can be imported as needed. The below code snippet shows how the custom LIB_PIPELINE_UTILS
imports and uses another custom library LIB_LOGGER
.
Code Block | ||
---|---|---|
| ||
// imports omitted for brevity
// create a new instance of our custom library
// the LOG variable should be passed in the constructor for any imported custom library instance
def logger = new com.flexagon.groovy.custom.LIB_LOGGER(LOG)
void myPipelineFunction()
{
logger.logMessage("Logger library import")
// code omitted for brevity
} |
Circular Imports
Circular imports of custom libraries are not allowed and if found an error will be thrown [Circular imports detected. Please check if libraries are creating instances of each other outside of a function scope..]
when attempting to test or save the library.
The below example demonstrates a circular library import and why its a problem:
LIB_ONE
Code Block |
---|
def libTwo = new com.flexagon.groovy.custom.LIB_TWO(LOG)
def myFunction() {
// do some logic
} |
LIB_TWO
Code Block |
---|
def libOne = new com.flexagon.groovy.custom.LIB_ONE(LOG)
def myFunction() {
// do some logic
} |
Lets look at what happens when FlexDeploy compiles and creates instances of your custom libraries that will be added to other Groovy scripts.
FlexDeploy will iterate through all your Groovy Libraries and create instances of each
A new instance of
LIB_ONE
is created.During initialization of
LIB_ONE
it will create a new instance ofLIB_TWO
as declared on line 1 ofLIB_ONE
An instance of
LIB_TWO
is created during step 3. This in turn creates an instance ofLIB_ONE
as declared on line 1 ofLIB_TWO
.We are now stuck in a loop between steps 3 and 4, infinitely creating new instances. This is what is known as a circular dependency and will result in an error being thrown.