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 tool it contains is a maven plugin used to generate drivers.

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

$ mvn 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.
