sk89q/WorldEdit — pull request #299 by sk89q (2014-08-01 00:30:24+00:00)
Title: Switch to a Gradle multi-module build and abandon Maven

**This is still a work in progress.**

----

The purpose of this PR/branch is to switch the project to a Gradle multi-module build.

The problem
----------------------

* We are currently using two separate build systems to build two different things. Gradle is used for the Forge build and Maven is used for everything else.
* It is not possible to publish artifacts for Forge, Bukkit, and "core" separately.
* It is not possible to create one single build containing all the releases with the same version easily.

Why Gradle?
----------------------

Gradle is not by choice per se. Forge builds require Gradle and we are not interested in writing a Maven build for Forge.

Generally, Gradle builds are much more complicated than Maven builds for more complex (but standard) tasks, but allow more flexibility without having to write full plugins.

The new layout
----------------------

* **worldedit-core** contains the core WorldEdit code.
* **worldedit-bukkit** contains the Bukkit platform.
* **worldedit-forge** contains the Forge platform.

Complications
----------------------

* Git doesn't show history of moved or renamed files without the `--follow` parameter.
* GitHub doesn't know how to show history of a file past its last move or rename.
* Breaks existing CI servers building WorldEdit.
* Support for Gradle is generally poorer than for Maven, but Android does use Gradle.
* It is more difficult to setup a Gradle multi-module project in an IDE.
* Any current PR requests or forks may be harder to integrate.

What's left to do
----------------------

* Investigate how easy it is to setup the new project in Netbeans, IntelliJ IDEA, and Eclipse.
* Re-implement all features of the Maven build into the Gradle build.
* Implement deployment of artifacts.
* Implement a release job.
* Consider moving the WorldEdit Adapters project into a module that will also install the adapters into the Bukkit port automatically.