THRIFT-(1418|1507|3983|4120|4178|4259|4294): Multiple issues
Client: java

THRIFT-4294: Java Configure Fails for Ant >= 1.10
THRIFT-4259: Thrift does not compile due to Ant Maven task errors
THRIFT-4178: Java libraries missing from package when using cmake
THRIFT-3983: libthrift is deployed on central with pom packaging
             instead of jar
THRIFT-1507: Maven can't download resource from central when behind
             a proxy and won't use local repository
THRIFT-1418: Compiling Thrift from source: Class
             org.apache.tools.ant.taskdefs.ConditionTask doesn't
             support the nested "typefound" element

Refactor CMake install hook to allow using "sudo make install/fast"
which avoids the THRIFT-1507 and THRIFT-1418 issues.

New Gradle based build system for Thrift Java Library

* Add Gradle 4.4.1 Wrapper artifacts to enable builds
Using the Gradle Wrapper helps normalize the builds on all platforms
so we use a consistent build tool independent of package managers.

The Gradle build logic was partitioned into multiple specific
scripts to simplify understanding and maintenance of the build.

This is now hooked into CMake and Autoconf processing steps
and can build/test/publish to Maven. The README.md was updated
to illustrate the new build options and add some documentation
on the requirements for Maven publication.

Cleaned up the CMake files to reduce reliance on file globbing
which is known to cause confusion when multiple users contribute.

* Fix two minor issues in Javadoc and unit test

Return values were undeclared in Javadoc
Test was asserting on the wrong test object instance

* Create simple runner scripts for cross-check

Using Gradle as a java execution wrapper is too heavy.
I simplified the test client/server execution by using a
three generated scripts in the build directory direcly
callable by the cross-check test harness.

* Cleanup the remaining Ant build scripts

Pulled the Maven Ant task properties out of the Java build
since they are no longer used there.
Deleted the no longer used build.xml and build.properties
files from the Java build.
Made each Ant build own the Maven Ant task details in their
build.properties file.

* Fix the build issue with Java SSL in the ubuntu-trusty container

The latest Trusty JDK7 builds seem to have encountered this issue
because the OpenJDK removed the SunEC algorithms.

* Update the developer info as requested in review

Use the generic Apache Thrift developer list for contact information

* Add Clover Code coverage for easy access by developers

Clover plugin for Gradle was applied and configured which enables
code coverage reports to be available on demand via a command line
option. The documentation in the README.md was enhanced to give
the details of this change and how to take advantage of it.
diff --git a/test/tests.json b/test/tests.json
index fd79a9b..1640eac 100644
--- a/test/tests.json
+++ b/test/tests.json
@@ -1,686 +1,678 @@
-[{
-        "name": "c_glib",
-        "platforms": [
-            "Linux"
-        ],
-        "server": {
-            "command": [
-                "test_server",
-                "--lt-debug"
-            ],
-            "protocols": [
-                "binary:multi",
-                "compact:multic"
-            ]
-        },
-        "client": {
-            "command": [
-                "test_client",
-                "--lt-debug"
-            ],
-            "protocols": [
-                "multi:binary",
-                "multic:compact"
-            ],
-            "sockets": [
-                "ip-ssl"
-            ]
-        },
-        "transports": [
-            "buffered",
-            "framed"
-        ],
-        "sockets": [
-            "ip"
-        ],
-        "protocols": [
-            "binary",
-            "compact",
-            "multi",
-            "multic"
-        ],
-        "workdir": "c_glib"
+[
+  {
+    "name": "c_glib",
+    "platforms": [
+      "Linux"
+    ],
+    "server": {
+      "command": [
+        "test_server",
+        "--lt-debug"
+      ],
+      "protocols": [
+        "binary:multi",
+        "compact:multic"
+      ]
     },
-    {
-        "name": "d",
-        "server": {
-            "command": [
-                "thrift_test_server"
-            ]
-        },
-        "client": {
-            "command": [
-                "thrift_test_client"
-            ]
-        },
-        "transports": [
-            "http",
-            "buffered",
-            "framed"
-        ],
-        "sockets": [
-            "ip",
-            "ip-ssl"
-        ],
-        "protocols": [
-            "binary",
-            "compact",
-            "json"
-        ],
-        "workdir": "../lib/d/test"
+    "client": {
+      "command": [
+        "test_client",
+        "--lt-debug"
+      ],
+      "protocols": [
+        "multi:binary",
+        "multic:compact"
+      ],
+      "sockets": [
+        "ip-ssl"
+      ]
     },
-    {
-        "name": "go",
-        "server": {
-            "command": [
-                "testserver",
-                "--certPath=../../keys"
-            ]
-        },
-        "client": {
-            "timeout": 6,
-            "command": [
-                "testclient"
-            ]
-        },
-        "transports": [
-            "buffered",
-            "framed",
-            "http"
-        ],
-        "sockets": [
-            "ip",
-            "ip-ssl"
-        ],
-        "protocols": [
-            "binary",
-            "compact",
-            "json"
-        ],
-        "workdir": "go/bin"
+    "transports": [
+      "buffered",
+      "framed"
+    ],
+    "sockets": [
+      "ip"
+    ],
+    "protocols": [
+      "binary",
+      "compact",
+      "multi",
+      "multic"
+    ],
+    "workdir": "c_glib"
+  },
+  {
+    "name": "d",
+    "server": {
+      "command": [
+        "thrift_test_server"
+      ]
     },
-    {
-        "name": "java",
-        "join_args": true,
-        "command": [
-            "ant",
-            "-f",
-            "build.xml",
-            "-Dno-gen-thrift=\"\"",
-            "-Dtestargs"
-        ],
-        "prepare": [
-            "ant",
-            "-f",
-            "build.xml",
-            "compile-test"
-        ],
-        "server": {
-            "delay": 10,
-            "extra_args": ["run-testserver"],
-            "protocols": [
-                "binary:multi",
-                "compact:multic",
-                "json:multij"
-            ]
-        },
-        "client": {
-            "timeout": 13,
-            "extra_args": ["run-testclient"],
-            "transports": [
-                "http"
-            ],
-            "protocols": [
-                "multi:binary",
-                "multic:compact",
-                "multij:json"
-            ]
-        },
-        "transports": [
-            "buffered",
-            "framed",
-            "framed:fastframed"
-        ],
-        "sockets": [
-            "ip",
-            "ip-ssl"
-        ],
-        "protocols": [
-            "binary",
-            "compact",
-            "json",
-            "multi",
-            "multic",
-            "multij"
-        ],
-        "workdir": "../lib/java"
+    "client": {
+      "command": [
+        "thrift_test_client"
+      ]
     },
-    {
-        "name": "nodejs",
-        "env": {
-            "NODE_PATH": "../lib"
-        },
-        "server": {
-            "command": [
-                "node",
-                "server.js",
-                "--type=tcp"
-            ]
-        },
-        "client": {
-            "timeout": 6,
-            "command": [
-                "node",
-                "client.js",
-                "--type=tcp"
-            ]
-        },
-        "transports": [
-            "buffered",
-            "framed",
-            "http"
-        ],
-        "sockets": [
-            "ip",
-            "ip-ssl"
-        ],
-        "protocols": [
-            "compact",
-            "binary",
-            "json"
-        ],
-        "workdir": "../lib/nodejs/test"
+    "transports": [
+      "http",
+      "buffered",
+      "framed"
+    ],
+    "sockets": [
+      "ip",
+      "ip-ssl"
+    ],
+    "protocols": [
+      "binary",
+      "compact",
+      "json"
+    ],
+    "workdir": "../lib/d/test"
+  },
+  {
+    "name": "go",
+    "server": {
+      "command": [
+        "testserver",
+        "--certPath=../../keys"
+      ]
     },
-    {
-        "name": "hs",
-        "server": {
-            "command": [
-                "TestServer"
-            ]
-        },
-        "client": {
-            "timeout": 6,
-            "transports": [
-                "http"
-            ],
-            "command": [
-                "TestClient"
-            ]
-        },
-        "transports": [
-            "buffered",
-            "framed"
-        ],
-        "sockets": [
-            "ip"
-        ],
-        "protocols": [
-            "header",
-            "compact",
-            "binary",
-            "json"
-        ],
-        "workdir": "hs"
+    "client": {
+      "timeout": 6,
+      "command": [
+        "testclient"
+      ]
     },
-    {
-        "name": "py",
-        "server": {
-            "extra_args": ["TSimpleServer"],
-            "command": [
-                "TestServer.py",
-                "--verbose",
-                "--genpydir=gen-py"
-            ]
-        },
-        "client": {
-            "timeout": 10,
-            "command": [
-                "TestClient.py",
-                "--verbose",
-                "--host=localhost",
-                "--genpydir=gen-py"
-            ]
-        },
-        "transports": [
-            "buffered",
-            "framed"
-        ],
-        "sockets": [
-            "ip",
-            "ip-ssl"
-        ],
-        "protocols": [
-            "compact",
-            "binary",
-            "json",
-            "binary:accel",
-            "compact:accelc"
-        ],
-        "workdir": "py"
+    "transports": [
+      "buffered",
+      "framed",
+      "http"
+    ],
+    "sockets": [
+      "ip",
+      "ip-ssl"
+    ],
+    "protocols": [
+      "binary",
+      "compact",
+      "json"
+    ],
+    "workdir": "go/bin"
+  },
+  {
+    "name": "java",
+    "join_args": false,
+    "server": {
+      "delay": 15,
+      "command": [
+        "build/runserver"
+      ],
+      "protocols": [
+        "binary:multi",
+        "compact:multic",
+        "json:multij"
+      ]
     },
-    {
-        "comment": "Using 'python3' executable to test py2 and 3 at once",
-        "name": "py3",
-        "server": {
-            "extra_args": ["TSimpleServer"],
-            "command": [
-                "python3",
-                "TestServer.py",
-                "--verbose",
-                "--genpydir=gen-py"
-            ]
-        },
-        "client": {
-            "timeout": 10,
-            "command": [
-                "python3",
-                "TestClient.py",
-                "--host=localhost",
-                "--genpydir=gen-py"
-            ]
-        },
-        "transports": [
-            "buffered",
-            "framed"
-        ],
-        "sockets": [
-            "ip-ssl",
-            "ip"
-        ],
-        "protocols": [
-            "compact",
-            "binary",
-            "json",
-            "binary:accel",
-            "compact:accelc"
-        ],
-        "workdir": "py"
+    "client": {
+      "timeout": 13,
+      "command": [
+        "build/runclient"
+      ],
+      "transports": [
+        "http"
+      ],
+      "protocols": [
+        "multi:binary",
+        "multic:compact",
+        "multij:json"
+      ]
     },
-    {
-        "name": "cpp",
-        "server": {
-            "command": [
-                "TestServer"
-            ],
-            "protocols": [
-                "binary:multi",
-                "compact:multic",
-                "header:multih",
-                "json:multij"
-            ]
-        },
-        "client": {
-            "timeout": 8,
-            "command": [
-                "TestClient"
-            ],
-            "protocols": [
-                "multi:binary",
-                "multic:compact",
-                "multih:header",
-                "multij:json"
-            ]
-        },
-        "transports": [
-            "buffered",
-            "http",
-            "framed"
-        ],
-        "sockets": [
-            "ip",
-            "ip-ssl",
-            "domain"
-        ],
-        "protocols": [
-            "compact",
-            "binary",
-            "json",
-            "header",
-            "multi",
-            "multic",
-            "multih",
-            "multij"
-        ],
-        "workdir": "cpp"
+    "transports": [
+      "buffered",
+      "framed",
+      "framed:fastframed"
+    ],
+    "sockets": [
+      "ip",
+      "ip-ssl"
+    ],
+    "protocols": [
+      "binary",
+      "compact",
+      "json",
+      "multi",
+      "multic",
+      "multij"
+    ],
+    "workdir": "../lib/java"
+  },
+  {
+    "name": "nodejs",
+    "env": {
+      "NODE_PATH": "../lib"
     },
-    {
-        "name": "rb",
-        "server": {
-            "command": [
-                "ruby",
-                "../integration/TestServer.rb"
-            ]
-        },
-        "client": {
-            "timeout": 5,
-            "command": [
-                "ruby",
-                "../integration/TestClient.rb"
-            ]
-        },
-        "transports": [
-            "buffered",
-            "framed"
-        ],
-        "sockets": [
-            "ip"
-        ],
-        "protocols": [
-            "compact",
-            "binary",
-            "json",
-            "binary:accel"
-        ],
-        "workdir": "rb/gen-rb"
+    "server": {
+      "command": [
+        "node",
+        "server.js",
+        "--type=tcp"
+      ]
     },
-    {
-        "name": "csharp",
-        "env": {
-            "MONO_PATH": "../../lib/csharp/"
-        },
-        "transports": [
-            "buffered",
-            "framed"
-        ],
-        "sockets": [
-            "ip",
-            "ip-ssl"
-        ],
-        "protocols": [
-            "binary",
-            "compact",
-            "json"
-        ],
-        "server": {
-            "command": [
-                "mono",
-                "TestClientServer.exe",
-                "server"
-            ]
-        },
-        "client": {
-            "timeout": 9,
-            "command": [
-                "mono",
-                "TestClientServer.exe",
-                "client"
-            ],
-            "protocols": [
-                "multi",
-                "multic",
-                "multi:binary",
-                "multic:compact"
-            ]
-        },
-        "workdir": "csharp"
+    "client": {
+      "timeout": 6,
+      "command": [
+        "node",
+        "client.js",
+        "--type=tcp"
+      ]
     },
-    {
-        "name": "netcore",
-        "transports": [
-            "buffered",
-            "framed"
-        ],
-        "sockets": [
-            "ip",
-            "ip-ssl"
-        ],
-        "protocols": [
-            "binary",
-            "compact",
-            "json"
-        ],
+    "transports": [
+      "buffered",
+      "framed",
+      "http"
+    ],
+    "sockets": [
+      "ip",
+      "ip-ssl"
+    ],
+    "protocols": [
+      "compact",
+      "binary",
+      "json"
+    ],
+    "workdir": "../lib/nodejs/test"
+  },
+  {
+    "name": "hs",
+    "server": {
+      "command": [
+        "TestServer"
+      ]
+    },
+    "client": {
+      "timeout": 6,
+      "transports": [
+        "http"
+      ],
+      "command": [
+        "TestClient"
+      ]
+    },
+    "transports": [
+      "buffered",
+      "framed"
+    ],
+    "sockets": [
+      "ip"
+    ],
+    "protocols": [
+      "header",
+      "compact",
+      "binary",
+      "json"
+    ],
+    "workdir": "hs"
+  },
+  {
+    "name": "py",
+    "server": {
+      "extra_args": ["TSimpleServer"],
+      "command": [
+        "TestServer.py",
+        "--verbose",
+        "--genpydir=gen-py"
+      ]
+    },
+    "client": {
+      "timeout": 10,
+      "command": [
+        "TestClient.py",
+        "--verbose",
+        "--host=localhost",
+        "--genpydir=gen-py"
+      ]
+    },
+    "transports": [
+      "buffered",
+      "framed"
+    ],
+    "sockets": [
+      "ip",
+      "ip-ssl"
+    ],
+    "protocols": [
+      "compact",
+      "binary",
+      "json",
+      "binary:accel",
+      "compact:accelc"
+    ],
+    "workdir": "py"
+  },
+  {
+    "comment": "Using 'python3' executable to test py2 and 3 at once",
+    "name": "py3",
+    "server": {
+      "extra_args": ["TSimpleServer"],
+      "command": [
+        "python3",
+        "TestServer.py",
+        "--verbose",
+        "--genpydir=gen-py"
+      ]
+    },
+    "client": {
+      "timeout": 10,
+      "command": [
+        "python3",
+        "TestClient.py",
+        "--host=localhost",
+        "--genpydir=gen-py"
+      ]
+    },
+    "transports": [
+      "buffered",
+      "framed"
+    ],
+    "sockets": [
+      "ip-ssl",
+      "ip"
+    ],
+    "protocols": [
+      "compact",
+      "binary",
+      "json",
+      "binary:accel",
+      "compact:accelc"
+    ],
+    "workdir": "py"
+  },
+  {
+    "name": "cpp",
+    "server": {
+      "command": [
+        "TestServer"
+      ],
+      "protocols": [
+        "binary:multi",
+        "compact:multic",
+        "header:multih",
+        "json:multij"
+      ]
+    },
+    "client": {
+      "timeout": 8,
+      "command": [
+        "TestClient"
+      ],
+      "protocols": [
+        "multi:binary",
+        "multic:compact",
+        "multih:header",
+        "multij:json"
+      ]
+    },
+    "transports": [
+      "buffered",
+      "http",
+      "framed"
+    ],
+    "sockets": [
+      "ip",
+      "ip-ssl",
+      "domain"
+    ],
+    "protocols": [
+      "compact",
+      "binary",
+      "json",
+      "header",
+      "multi",
+      "multic",
+      "multih",
+      "multij"
+    ],
+    "workdir": "cpp"
+  },
+  {
+    "name": "rb",
+    "server": {
+      "command": [
+        "ruby",
+        "../integration/TestServer.rb"
+      ]
+    },
+    "client": {
+      "timeout": 5,
+      "command": [
+        "ruby",
+        "../integration/TestClient.rb"
+      ]
+    },
+    "transports": [
+      "buffered",
+      "framed"
+    ],
+    "sockets": [
+      "ip"
+    ],
+    "protocols": [
+      "compact",
+      "binary",
+      "json",
+      "binary:accel"
+    ],
+    "workdir": "rb/gen-rb"
+  },
+  {
+    "name": "csharp",
+    "env": {
+      "MONO_PATH": "../../lib/csharp/"
+    },
+    "transports": [
+      "buffered",
+      "framed"
+    ],
+    "sockets": [
+      "ip",
+      "ip-ssl"
+    ],
+    "protocols": [
+      "binary",
+      "compact",
+      "json"
+    ],
+    "server": {
+      "command": [
+        "mono",
+        "TestClientServer.exe",
+        "server"
+      ]
+    },
+    "client": {
+      "timeout": 9,
+      "command": [
+        "mono",
+        "TestClientServer.exe",
+        "client"
+      ],
+      "protocols": [
+        "multi",
+        "multic",
+        "multi:binary",
+        "multic:compact"
+      ]
+    },
+    "workdir": "csharp"
+  },
+  {
+    "name": "netcore",
+    "transports": [
+      "buffered",
+      "framed"
+    ],
+    "sockets": [
+      "ip",
+      "ip-ssl"
+    ],
+    "protocols": [
+      "binary",
+      "compact",
+      "json"
+    ],
         "server": {
-            "command": [
-                "dotnet",
-                "run",
-                "--no-build",
+      "command": [
+        "dotnet",
+        "run",
+  "--no-build",
                 "--project=Server/Server.csproj",
-                "server"
-            ]
-        },
-        "client": {
-            "timeout": 10,
-            "command": [
-                "dotnet",
-                "run",
-                "--no-build",
+        "server"
+      ]
+    },
+    "client": {
+      "timeout": 10,
+      "command": [
+        "dotnet",
+        "run",
+  "--no-build",
                 "--project=Client/Client.csproj",
-                "client"
-            ]
-        },
+        "client"
+      ]
+    },
         "workdir": "netcore"
+  },
+  {
+    "name": "perl",
+    "transports": [
+      "buffered",
+      "framed"
+    ],
+    "sockets": [
+      "ip",
+      "ip-ssl",
+      "domain"
+    ],
+    "protocols": [
+      "binary",
+      "multi"
+    ],
+    "client": {
+      "command": [
+        "perl",
+        "-Igen-perl/",
+        "-I../../lib/perl/lib/",
+        "TestClient.pl",
+        "--ca=../keys/CA.pem",
+        "--cert=../keys/client.crt",
+        "--key=../keys/client.key"
+      ],
+      "protocols": [
+        "multi:binary"
+      ]
     },
-    {
-        "name": "perl",
-        "transports": [
-            "buffered",
-            "framed"
-        ],
-        "sockets": [
-            "ip",
-            "ip-ssl",
-            "domain"
-        ],
-        "protocols": [
-            "binary",
-            "multi"
-        ],
-        "client": {
-            "command": [
-                "perl",
-                "-Igen-perl/",
-                "-I../../lib/perl/lib/",
-                "TestClient.pl",
-                "--ca=../keys/CA.pem",
-                "--cert=../keys/client.crt",
-                "--key=../keys/client.key"
-            ],
-            "protocols": [
-                "multi:binary"
-            ]
-        },
-        "server": {
-            "command": [
-                "perl",
-                "-Igen-perl/",
-                "-I../../lib/perl/lib/",
-                "TestServer.pl",
-                "--cert=../keys/server.crt",
-                "--key=../keys/server.key"
-            ],
-            "protocols": [
-                "binary:multi"
-            ]
-        },
-        "workdir": "perl"
+    "server": {
+      "command": [
+        "perl",
+        "-Igen-perl/",
+        "-I../../lib/perl/lib/",
+        "TestServer.pl",
+        "--cert=../keys/server.crt",
+        "--key=../keys/server.key"
+      ],
+      "protocols": [
+        "binary:multi"
+      ]
     },
-    {
-        "name": "php",
-        "client": {
-            "timeout": 6,
-            "transports": [
-                "buffered",
-                "framed"
-            ],
-            "sockets": [
-                "ip"
-            ],
-            "protocols": [
-                "binary",
-                "compact",
-                "binary:accel"
-            ],
-            "command": [
-                "php",
-                "-dextension_dir=php_ext_dir",
-                "--php-ini=test_php.ini",
-                "--no-php-ini",
-                "-ddisplay_errors=stderr",
-                "-dlog_errors=0",
-                "-derror_reporting=E_ALL",
-                "TestClient.php"
-            ]
-        },
-        "workdir": "php"
+    "workdir": "perl"
+  },
+  {
+    "name": "php",
+    "client": {
+      "timeout": 6,
+      "transports": [
+        "buffered",
+        "framed"
+      ],
+      "sockets": [
+        "ip"
+      ],
+      "protocols": [
+        "binary",
+        "compact",
+        "binary:accel"
+      ],
+      "command": [
+        "php",
+        "-dextension_dir=php_ext_dir",
+        "--php-ini=test_php.ini",
+        "--no-php-ini",
+        "-ddisplay_errors=stderr",
+        "-dlog_errors=0",
+        "-derror_reporting=E_ALL",
+        "TestClient.php"
+      ]
     },
-    {
-        "name": "dart",
-        "client": {
-            "transports": [
-                "buffered",
-                "framed",
-                "http"
-            ],
-            "sockets": [
-                "ip"
-            ],
-            "protocols": [
-                "binary",
-                "compact",
-                "json"
-            ],
-            "command": [
-                "dart",
-                "test_client/bin/main.dart"
-            ]
-        },
-        "workdir": "dart"
+    "workdir": "php"
+  },
+  {
+    "name": "dart",
+    "client": {
+      "transports": [
+        "buffered",
+        "framed",
+        "http"
+      ],
+      "sockets": [
+        "ip"
+      ],
+      "protocols": [
+        "binary",
+        "compact",
+        "json"
+      ],
+      "command": [
+        "dart",
+        "test_client/bin/main.dart"
+      ]
     },
-    {
-        "name": "erl",
-        "transports": [
-            "buffered",
-            "framed"
-        ],
-        "sockets": [
-            "ip",
-            "ip-ssl"
-        ],
-        "protocols": [
-            "binary",
-            "compact"
-        ],
-        "client": {
-            "command": [
-                "erl",
-                "+K",
-                "true",
-                "-noshell",
-                "-pa",
-                "../../lib/erl/ebin/",
-                "-pa",
-                "./ebin",
-                "-s",
-                "test_client",
-                "-s",
-                "init",
-                "stop",
-                "-extra"
-            ]
-        },
-        "server": {
-            "command": [
-                "erl",
-                "+K",
-                "true",
-                "-noshell",
-                "-pa",
-                "../../lib/erl/ebin/",
-                "-pa",
-                "./ebin",
-                "-s",
-                "test_thrift_server",
-                "-extra"
-            ]
-        },
-        "workdir": "erl"
+    "workdir": "dart"
+  },
+  {
+    "name": "erl",
+    "transports": [
+      "buffered",
+      "framed"
+    ],
+    "sockets": [
+      "ip",
+      "ip-ssl"
+    ],
+    "protocols": [
+      "binary",
+      "compact"
+    ],
+    "client": {
+      "command": [
+        "erl",
+        "+K",
+        "true",
+        "-noshell",
+        "-pa",
+        "../../lib/erl/ebin/",
+        "-pa",
+        "./ebin",
+        "-s",
+        "test_client",
+        "-s",
+        "init",
+        "stop",
+        "-extra"
+      ]
     },
-    {
-        "name": "js",
-        "transports": [
-            "http"
-        ],
-        "sockets": [
-            "ip"
-        ],
-        "protocols": [
-            "json"
-        ],
-        "client": {
-            "command": [
-                "phantomjs",
-                "test/phantom-client.js"
-            ]
-        },
-        "workdir": "../lib/js"
+    "server": {
+      "command": [
+        "erl",
+        "+K",
+        "true",
+        "-noshell",
+        "-pa",
+        "../../lib/erl/ebin/",
+        "-pa",
+        "./ebin",
+        "-s",
+        "test_thrift_server",
+        "-extra"
+      ]
     },
-    {
-        "name": "lua",
-        "TODO": "Add dll to LUA_CPATH",
-        "env": {
-            "LUA_PATH": ";;gen-lua/?.lua;../../lib/lua/?.lua",
-            "LUA_CPATH": ";;../../lib/lua/.libs/?.so"
-        },
-        "client": {
-            "timeout": 5,
-            "transports": [
-                "buffered",
-                "framed",
-                "http"
-            ],
-            "sockets": [
-                "ip"
-            ],
-            "protocols": [
-                "binary",
-                "compact",
-                "json"
-            ],
-            "command": [
-                "lua",
-                "test_basic_client.lua"
-            ]
-        },
-        "workdir": "lua"
+    "workdir": "erl"
+  },
+  {
+    "name": "js",
+    "transports": [
+      "http"
+    ],
+    "sockets": [
+      "ip"
+    ],
+    "protocols": [
+      "json"
+    ],
+    "client": {
+      "command": [
+        "phantomjs",
+        "test/phantom-client.js"
+      ]
     },
-    {
-        "name": "rs",
-        "env": {
-            "RUST_BACKTRACE": "1",
-            "RUST_LOG": "info"
-        },
-        "server": {
-            "command": [
-                "test_server"
-            ],
-            "protocols": [
-                "binary:multi",
-                "compact:multic"
-            ]
-        },
-        "client": {
-            "timeout": 6,
-            "command": [
-                "test_client"
-            ],
-            "protocols": [
-                "multi:binary",
-                "multic:compact"
-            ]
-        },
-        "sockets": [
-            "ip"
-        ],
-        "transports": [
-            "buffered",
-            "framed"
-        ],
-        "protocols": [
-            "binary",
-            "compact",
-            "multi",
-            "multic"
-        ],
-        "workdir": "rs/bin"
-    }
-]
\ No newline at end of file
+    "workdir": "../lib/js"
+  },
+  {
+    "name": "lua",
+    "TODO": "Add dll to LUA_CPATH",
+    "env": {
+      "LUA_PATH": ";;gen-lua/?.lua;../../lib/lua/?.lua",
+      "LUA_CPATH": ";;../../lib/lua/.libs/?.so"
+    },
+    "client": {
+      "timeout": 5,
+      "transports": [
+        "buffered",
+        "framed",
+        "http"
+      ],
+      "sockets": [
+        "ip"
+      ],
+      "protocols": [
+        "binary",
+        "compact",
+        "json"
+      ],
+      "command": [
+        "lua",
+        "test_basic_client.lua"
+      ]
+    },
+    "workdir": "lua"
+  },
+  {
+    "name": "rs",
+    "env": {
+      "RUST_BACKTRACE": "1",
+      "RUST_LOG": "info"
+    },
+    "server": {
+      "command": [
+        "test_server"
+      ],
+      "protocols": [
+        "binary:multi",
+        "compact:multic"
+      ]
+    },
+    "client": {
+      "timeout": 6,
+      "command": [
+        "test_client"
+      ],
+      "protocols": [
+        "multi:binary",
+        "multic:compact"
+      ]
+    },
+    "sockets": [
+      "ip"
+    ],
+    "transports": [
+      "buffered",
+      "framed"
+    ],
+    "protocols": [
+      "binary",
+      "compact",
+      "multi",
+      "multic"
+    ],
+    "workdir": "rs/bin"
+  }
+]