Apache PLC4X Build-Tools
========================

Apache PLC4X Build-Tools is a sub-project of the Apache PLC4X project and contains
all the tools needed to build the main project.

Currently the only tools it contains is a maven plugin used to generate drivers and
a new maven-site-plugin site theme.

It currently doesn't contain any actual code-generation modules, but just the plugin
and the API required to load and use code-generation modules.

The actual code-generation modules are located inside the main project.

Environment
-----------

Currently the project is configured to require the following software:

1) Java 8 JDK: For running Maven in general as well as compiling the Java and Scala
modules `JAVA_HOME configured to point to that.


Getting Started
---------------

Normally you wouldn't be required to build this module as the artifacts it produces
will be made available via one of the maven repositories. However if you want to improve
or fix the existing tools, you will have to build your version locally.

You must have Java 8 installed on your system and connectivity to Maven Central
(for downloading external third party dependencies). Maven will be automatically
downloaded and installed by the maven wrapper `mvnw`.

Build PLC4X Java jars and install them in your local maven repository

$ ./mvnw install

This should make the build-tools available to the main projects build.
In order to use your locally built version of the build-tools you should
update the property: `plc4x-code-generation.version` in the PLC4X main pom.xml.



Licensing
---------

Apache PLC4X is released under the Apache License Version 2.0.
