2017-10-29

1: The Usage of Our Projects Build System

<The previous article in this series | The table of contents of this series | The next article in this series>

Main Body START

The Usage of Our Projects Build System Is Explained

About: Gradle

About: Ant

About: Java Programming Language

About: UNO (Universal Network Objects)

About: LibreOffice

About: Apache OpenOffice

The Purpose of This Article

-Hypothesizer

When we cite sample programs archived in zip files in any of our series, we use the same projects build system. As it is troublesome to describe how to build projects each time, we will describe it at one place here.

-Rebutter

OK.

The Build Environment Has to Have Been Built

-Hypothesizer

As we use Gradle or Ant (not both of them are necessary), we have to have installed at least one of them and JDK. We have described how to install them here for Linux and here for Windows.

-Rebutter

Well, they include also information about other products, but we can ignore irrelevant parts.

-Hypothesizer

If we aren't building UNO extensions, LibreOffice (or Apache OpenOffice), LibreOffice SDK (or Apache OpenOffice SDK), and wmctrl are irrelevant.

We can install the products in any ways we want, but the versions of the products are expected to be higher than these.

  • JDK 1.8.0
  • Ant 1.9.6
  • Gradle 3.1
-Rebutter

You aren't saying that lower versions will never do, are you?

-Hypothesizer

The versions above are just versions we have used; I don't know any particular reason why some lower versions won't do, except JDK. As for JDK, lower versions won't do because we use, say, lambda expressions.

How to Build Projects

-Hypothesizer

As we cite sample programs archived in zip files, we have to expand the zip file with the directories structure preserved, in a directory.

-Rebutter

We will call the root directory of the expansion 'the development base directory'.

-Hypothesizer

The directories under the development base directory are project directories, and 'commonBuild*.gradle', 'commonBuild*.xml', and 'commonBuild.properties' under the development base directory are common (meaning 'used by other project-specific build scripts or build files') build scripts or build files. To build all the projects . . .

-Rebutter

Before that, I thought, we have to modify some properties in a common build script or a common build file.

-Hypothesizer

Ah, I forgot. When we intend to build UNO extension projects, properties, 'LIBREOFFICE_DIRECTORY_NAME' and 'LIBREOFFICE_SDK_DIRECTORY_NAME', in 'commonBuild.properties' for Ant or in 'commonBuild01.gradle' for Gradle have to be modified if they aren't correct for our environment.

-Rebutter

How should we modify them?

-Hypothesizer

'LIBREOFFICE_DIRECTORY_NAME' is the name of the directory where LibreOffice has been installed; 'LIBREOFFICE_SDK_DIRECTORY_NAME' is the name of the directory where LibreOffice SDK has been installed. On Windows, they will always have to be modified, and the directory separator to be used is '/', not '\', for example 'D:/LibreOffice'.

-Rebutter

Hmm . . .

-Hypothesizer

If the version of LibreOffice is lower that the one we expect, there might be other properties that have to be modified.

-Rebutter

What is the version we expect as the lowest version?

-Hypothesizer

'5.1.4'.

-Rebutter

Hmm . . .

-Hypothesizer

After the properties are correctly set, executing 'gradle' or 'ant' with the development base directory as the current directory will build all the projects.

When we want to build an individual project, we can execute 'gradle' or 'ant' with the project directory as the current directory

-Rebutter

Where can we find target artifacts?

-Hypothesizer

They should exist in the 'target' directory of each project directory.

When the project is a UNO extension project, the UNO extension will be registered into LibreOffice. Before that, the LibreOffice program instance (if there is one) will be tried to be shutdown.

-Rebutter

It wouldn't be abruptly shutdown mercilessly closing unsaved documents, would it?

-Hypothesizer

We will be gracefully asked to save those documents.

The Relation Between Multiple Zip Files Cited on This Site

-Rebutter

The common build scripts and common build files are included in all the zip files cited on this site. When we expand two zip files in the same directory, should we overwrite the old ones with new ones?

-Hypothesizer

New ones (see the file modification dates) should overwrite old ones: new ones should do fine with any project (if there is no bug in them).

-Rebutter

How about utility projects included in multiple zip files?

-Hypothesizer

Well, as they are experimental projects, we modify them frequently, and we don't always preserve the compatibility. If new utility projects break older projects, zip files will have to be expanded in different directories. Or as we replace zip files on this site with updated zip files that adapt to new utilities projects, we can use updated zip files.

-Rebutter

That means, the projects in a zip file can include many files irrelevant to the article that cites the zip file.

-Hypothesizer

In fact, that becomes so. Well, you know, it's too cumbersome to remove irrelevant files from each zip file . . .

-Rebutter

So, if some irrelevant files are included in a zip file cited by an article, they are for other articles.

Don't we have to erase existing project directories before we expand the zip file when those projects are included in the zip file?

-Hypothesizer

In principle, we have to, because some files could have been erased from those projects in the zip file, although in many cases, not erasing them wouldn't cause any harm.

How to Run a Program

-Hypothesizer

When a project includes a Java main class (a class that has the main method), we can run the program like these as the project directory as the current directory.

For Gradle:

@bash or cmd Source Code
gradle run -PMAIN_CLASS_NAME="<the main class name>" -PCOMMAND_LINE_ARGUMENTS="<the command line arguments>"

For Ant:

@bash or cmd Source Code
ant run -DMAIN_CLASS_NAME="<the main class name>" -DCOMMAND_LINE_ARGUMENTS="<the command line arguments>"
Main Body END

<The previous article in this series | The table of contents of this series | The next article in this series>