Since Groovy 2.4.8 we can use the uncapitalize
method on CharSequence
objects.
The capitalize
method was already available for a long time, but now we have the opposite as well.
In the following example we see that the uncapitalize
method only replaces the first letter of a String
value to lower case:
Continue reading →
Adding a block title in Asciidoctor is easily done by adding a line at the top of the block that starts with a dot (.
).
The text following the dot is then used as the title of the block.
But if the text of the title itself starts with a dot (.
) Asciidoctor get’s confused.
For example if we want to use a filename that starts with a dot (.filename
) we must use different syntax to set the block title with the filename.
In the next Ascciidoc markup sample we use different ways to set the block title for a code block with a filename that starts with a dot.
First we use the title
attribute for the block.
Another solution is to use the Unicode value for the dot.
Next we enclose the filename in back ticks ( `
) which also formats the filename with a monotype font.
And finally we can define the filename via a document attribute and reference the document attribute in the block title:
Continue reading →
Gradle builds are fast because Gradle supports incremental tasks.
This means Gradle can determine if input or output of task has changed, before running the task.
If nothing has changed a task is marked a up-to-date and the task is not executed, otherwise the task is executed.
If we want execute a task even if it is up-to-date we must use the command line option --rerun-tasks
.
In the following example we run the assemble
task for a simple Java project, and we see all tasks are executed.
When we invoke the assemble
task again we see the tasks are all up-to-date:
Continue reading →
With Spring Boot Actuator we get some useful endpoints in our application to check on our application when it is running.
One of the endpoints is the /info
endpoint.
We can add information about our application if Spring Boot finds a file META-INF/build-info.properties
in the classpath of our application.
With the Gradle Spring Boot plugin we can generate the build-info.properties
file.
When we apply the Gradle Spring Boot plugin to our project we get a Gradle extension springBoot
in our build file.
With this extension we can configure Spring Boot for our project.
To generate project information that is used by the /info
endpoint we must add the method statement buildInfo()
inside the springBoot
extension.
With this method statement the Gradle Spring Boot plugin generates a file build/main/resources/META-INF/build-info.properties.
.
Let’s run our application and send a request for /info
:
Continue reading →
With Spring Boot Actuator we get some endpoints that display information about our application.
One of the endpoints is the /info
endpoint.
If our project uses Git we can add information about Git to the /info
endpoint.
By default Spring Boot will look for a file git.properties
in the classpath of our application.
The file is a Java properties file with keys that start with git.
and have values like the branch name, commit identifier and commit message.
Spring Boot uses this information and when we request the /info
endpoint we get a response with the information.
This can be very useful to check the Git information that was used to build the application.
To create the git.properties
file we can use a Gradle (or Maven) plugin that will do the work for us.
In the following example we use the Gradle plugin to generate the git.properties
file for our project.
The Gradle Git properties plugin is added in the plugins
configuration block.
The plugin adds a Gradle extension gitProperties
that can be used to customize the output in git.properties
.
We could even change the location, but we keep it to the default location which is build/resources/main/git.properties
.
Continue reading →
When we generate a PNG version of our PlantUML definition the original definition is stored in the PNG image.
We can extract the definition using the command line option -metadata
.
We need to provide the PNG file and in the output we see the original PlantUML definition.
The following PNG image (activity.png
) is created with PlantUML:
Continue reading →
We can change the line style and color when we "draw" the line in our PlantUML definition.
We must set the line style and color between square brackets ([]
).
We can choose the following line styles: bold
, plain
, dotted
and dashed
.
The color is either a color name or a hexadecimal RGB code prefixed with a hash (#
).
In the following example activity diagram we apply different styles and colors to the lines:
Continue reading →
IntelliJ IDEA 2016.3 introduced the option to delegate the run action to Gradle .
This means when we have a run Configuration for our Java or Groovy classes we can use the Run action and IDEA will use Gradle to run the application.
Actually IntelliJ IDEA creates a new task of type JavaExec
dynamically for our specific run configuration with the main
property set to the class we want to run.
In the Edit Configuration dialog window we can set the command line argument and Java system properties.
These are passed on to the dynamically created JavaExec
task and are accessible from within the class that runs.
The environment variables that can be set in the Edit Configuration dialog windows are not passed to the JavaExec
task configuration.
But we can do it ourselves in the build script file of our project.
We look for the dynamically created task and use the environment
method to add a environment variable that can be access in the Java or Groovy class that is executed.
Continue reading →
To write a (nested) ordered lists in Asciidoctor is easy.
We need to start the line with a dot (.
) followed by a space and the list item text.
The number of dots reflects the levels of nesting.
So with two dots (..
) we have a nested list item.
By default each nested level has a separate numbering style.
The first level has arabic numbering, the second lower case alphanumeric, the third upper case alphanumeric, the fourth lower case roman and the fifth (which is maximum depth of nested levels in Asciidoctor) has style upper case roman.
But we can change this by setting a block style for each nested level block.
The name of the block style is arabic
, loweralpha
, upperalpha
, lowerromann
or upperroman
.
With the HTML5 backend we can also use decimal
and lowergreek
.
In the following example we have an ordered list where we set different block styles for the nested level:
Continue reading →
In PlantUML we can use the special variable %date%
to get the current date and time.
The default format shows day of the week, date, time and timezone.
We can change the date format by specifying our format with the Java SimpleDateFromat symbols.
For example to only get the hours and minutes we would write %date[HH:mm]%
.
In the following example we use the %date%
variable as is and with a custom format:
Continue reading →
Grails 3.2 changed the logging implementation for the log
field that is automatically injected in the Grails artefacts, like controllers and services.
Before Grails 3.2 the log
field was from Jakarta Apache Commons Log
class, but since Grails 3.2 this has become the Logger
class from Slf4J API.
A big difference is the fact that the methods for logging on the Logger
class don’t accepts an Object
as the first argument.
Before there would be an implicit toString
invocation on an object, but that doesn’t work anymore.
In the following example we try to use an object as the first argument of the debug
method in a controller class:
Continue reading →