Since the latest Grails versions a Grails wrapper is automatically created when we execute the create-app
command. If we don't want the wrapper to be created we can use the command argument --skip-wrapper
. If later we changed our mind and want the Grails wrapper we can simply run the wrapper
command from our Grails application directory.
Let's run the create-app
command with the --skip-wrapper
argument. If we check the contents of the created directory we see that the wrapper files are not created:
Continue reading →
Normally all Asciidoc files are processed and transformed to output files by Asciidoctor. But if we start the file name with an underscore (_
) the file is not transformed to an output file. This is very useful, because we can define some Asciidoc document fragments and include them in other Asciidoc files, but in the output directory the document fragment is not generated.
Let's create two Asciidoc files. One is _attrs.adoc
which is a document fragment file that is used in sample.doc
:
Continue reading →
To get the current Gradle version we can use the gradleVersion
property of the Gradle
object. This returns a string value we can use for displaying the values. If we want to compare Gradle versions we can use the GradleVersion
object. With this class we can get the current version, but we can also compare Gradle versions. This can be useful in our build scripts if we have functionality based on a Gradle version.
In the following build file we first have a task that uses the gradleVersion
of Gradle
. Then inside the task we use the static method current
of the GradleVersion
class. We get an GradleVersion
instance and we display different properties from this instance. In the task compareGradleVersion
we create a GradleVersion
instance with the static version
method. We compare multiple GradleVersion
objects and have different functionality based on the Gradle version.
Continue reading →
To define a Copy
task we specify the files we want to copy and to which directory. This definition is a CopySpec
instance. It contains the rules that defines what we want to copy. The archive tasks Jar
, Zip
and Tar
also use a CopySpec
instance.
When we create a task of type Copy
we get a task object that implements the CopySpec
interface. We can use all the methods from this interface to extend our recipe for copying tasks. In the following build file we first define the task website
. We use CopySpec
methods to configure the task. Then we define a task deploy
of type Sync
that also implements the CopySpec
interface.
Continue reading →
We can change the frames and grid of tables we define in Asciidoctor. We use the frames
attribute to change the outside frame of a table. We can choose between topbot
for top and bottom, sides
for only a frame at the sides of the table, none
if we don't want a frame. The default value all
create a frame around our table with top, sides and bottom.
To change the inner grid of a table we use the grids
table attribute. The default value all
displays a grid for columns and rows inside the table. The value cols
only displays a grid between columns, value rows
display a grid between rows and with value none
there will be no grid inside our table.
Continue reading →
Since Asciidoctor 1.5.0 we can use extensions when we write AsciiDoc documents. These extensions can be written in Ruby or any JVM language. If we use Gradle and the Asciidoctor Gradle plugin to transform our documents we can use both extensions. Of course an extension written in for example Java or Groovy can be included as a regular dependency in our build configuration. As the extension is on the classpath of the asciidoctor
task then it can be used. When the extension is a Ruby extension and available as a Ruby gem we need some more configuration in our build file. To use an Asciidoctor extension written in Ruby in our build we must first make sure that we can download the extension. Then we can configure the asciidoctor
task from the Asciidoctor Gradle plugin to use the extension.
Let's start with a sample Asciidoctor document which uses the Asciidoctor Diagram extension. With this extension we can embed diagrams as text in our document and get graphical images as output.
Continue reading →
In a previous post we learned how to use Asciidoc markup in a table. The a
character is just one of many styles we can define in our table. In this blog post we see which style options we have. We can either use the cols
attribute to define a style for a whole column or specify per cell the style.
We can use the following styles:
Continue reading →
When we define a table in Asciidoctor the columns all have the same width and the table will the whole width of the page. Of course we can change this when we define the table. We can change the table width with the width
attribute. We specify the column width with the cols
attribute.
First we will change the width of the columns. We can specify proportional integer values or a percentage to specify the width of a column. In the following sample Asciidoctor file we use proportional values in the first table. The first column has value 1
and the second column value 3
. This means the second column should be 3 times as wide as the first column. In the second table the column width is defined with percentage values. The first column should occupy 60%
of the table width and the last column the rest.
Continue reading →
When we define a table in Asciidoctor and want to use Asciidoc in a table cell it is not interpreted as Asciidoc by default. The text is literally shown and this might not be what we expect. But we can force Asciidoctor to interpret the cell contents as Asciidoctor.
Let's start with a very simple table. The last cell of the first row contains some Asciidoc markup:
Continue reading →
Creating a table with Asciidoctor is a breeze. The syntax is very clear and the HTML output shows a very nice looking table. But there is also a lot of configuration we can do when we define a table. For example by default all columns are left aligned, but we can change this to have values centered or right aligned in columns. We can even set the vertical alignment for columns. And if this is not enough we can change the horizontal and vertical alignment per cell.
Let's start with a simple table with three columns. We want the first column to be centered, the middle column to be left aligned and the last column should be right aligned. To achieve this we must configure the cols
attribute for our table definition. We use the following symbols to define the alignment:
Continue reading →
With Asciidoctor we can create tables where the header and rows are in CSV (Comma Separated Values) and DSV (Delimiter Separated Values) format. Normally we use a pipe-symbol (|
) to separate cell values. This is actually PSV (Prefix Separated Values) :-).
In the following Asciidoctor markup we create a very simple table with a header and two rows using CSV:
Continue reading →
Gradle uses the name build.gradle
as the default name for a build file. If we write our build code in a file build.gradle
then we don't have to specify the build filename when we run tasks. We can create build files with a different name other than build.gradle
. For example we can define our build logic in a file sample.gradle
. To run the tasks from this build file we can use the command line option -b
or --build-file
followed by the file name. But we can also change the project settings and set a new default build file name for our project. With the changed project settings we do not have to use the command line options -b
or --build-file
.
Suppose we have the following build file with the name sample.gradle
:
Continue reading →