Pārlūkot izejas kodu

switch to gradle
gradle files added
gradle: plugins added
build: files added
.travis.yml: gradle cache stored
distribution: tar and zip file stuff added
broker/build.gradle: osgi plugin added
build: bintray upload added
pom: files removed
distribution: assembly.xml removed
gradle: test ouput added to sub builds
.editorconfig: gradle files added
build: wrapper task added
osgi: added to h2_ and mapdb_storage
gradle: files cleaned
build.gradle: jars used for tar/zip

Andreas Mager 8 gadi atpakaļ
vecāks
revīzija
e8b105fa90

+ 3 - 0
.editorconfig

@@ -11,3 +11,6 @@ charset = utf-8
 indent_style = space
 indent_size = 4
 max_line_length=120
+
+[*.gradle]
+indent_size = 2

+ 3 - 1
.gitignore

@@ -1,3 +1,5 @@
+/build
+*/build/
 /target/
 /parser/target/
 /benchmarking/target/
@@ -31,7 +33,6 @@ broker/runner
 .mtj.tmp/
 
 # Package Files #
-*.jar
 *.war
 *.ear
 
@@ -43,3 +44,4 @@ broker/nb-configuration.xml
 broker/nbactions-Server.xml
 
 maven-metadata.xml
+/.gradle/

+ 10 - 0
.travis.yml

@@ -1,3 +1,13 @@
 language: java
 jdk:
   - oraclejdk8
+before_cache:
+  - rm -f  $HOME/.gradle/caches/modules-2/modules-2.lock
+  - rm -fr $HOME/.gradle/caches/*/plugin-resolution/
+cache:
+  directories:
+    - $HOME/.gradle/caches/
+    - $HOME/.gradle/wrapper/
+
+script:
+    - ./gradlew install test

+ 3 - 2
README.md

@@ -64,6 +64,7 @@ Include dependency in your project:
 
 ## Build from sources
 
-After a git clone of the repository, cd into the cloned sources and: `mvn clean package`. 
-In distribution/target directory will be produced the selfcontained tar for the broker with all dependencies and a running script. 
+After a git clone of the repository, cd into the cloned sources and: `./gradlew clean distribution:distMoquetteTar` or 
+`./gradlew clean distribution:distMoquetteZip`. 
+In distribution/build directory will be produced the selfcontained file for the broker with all dependencies and a running script. 
   

+ 51 - 0
broker/build.gradle

@@ -0,0 +1,51 @@
+
+description = 'Moquette - broker'
+
+apply plugin: 'osgi'
+apply plugin: 'maven'
+
+dependencies {
+    compile group: 'io.netty', name: 'netty-common', version: nettyVersion
+    compile group: 'io.netty', name: 'netty-buffer', version: nettyVersion
+    compile group: 'io.netty', name: 'netty-transport', version: nettyVersion
+    compile group: 'io.netty', name: 'netty-handler', version: nettyVersion
+    compile group: 'io.netty', name: 'netty-codec', version: nettyVersion
+    compile group: 'io.netty', name: 'netty-codec-http', version: nettyVersion
+    compile group: 'io.netty', name: 'netty-codec-mqtt', version: nettyVersion
+
+    compile group: 'io.netty', name: 'netty-transport-native-epoll', version: nettyVersion, classifier: 'linux-x86_64'
+    // <classifier>${os.detected.name}-${os.detected.arch}</classifier>
+
+    compile group: 'io.dropwizard.metrics', name: 'metrics-core', version:'3.2.2'
+    compile group: 'io.dropwizard.metrics', name: 'metrics-jvm', version:'3.2.2'
+
+    compile group: 'com.librato.metrics', name: 'metrics-librato', version:'5.1.0'
+    compile group: 'com.librato.metrics', name: 'librato-java' , version:'2.1.0'
+    compile group: 'com.bugsnag', name: 'bugsnag', version:'[3.0,4.0)'
+
+    compile group: 'commons-codec', name: 'commons-codec', version:'1.10'
+    // compile group: 'org.hdrhistogram', name: 'HdrHistogram', version:'2.1.4'
+    compile group: 'com.hazelcast', name: 'hazelcast', version:'3.5.4'
+
+    testCompile group: 'org.fusesource.mqtt-client', name: 'mqtt-client', version:'1.12'
+    testCompile group: 'org.eclipse.paho', name: 'org.eclipse.paho.client.mqttv3', version:'1.0.2'
+    testCompile group: 'org.eclipse.jetty.websocket', name: 'websocket-client', version:'9.2.0.M1'
+
+    testCompile group: 'com.h2database', name: 'h2', version:'1.4.191'
+}
+
+task createPom () {
+    pom { }.writeTo("build/pom.xml")
+}
+
+jar {
+    manifest {
+      instruction 'Bundle-Description', 'Moquette lightweight MQTT Broker'
+      instruction 'Bundle-License', 'http://www.apache.org/licenses/LICENSE-2.0.txt, http://www.eclipse.org/org/documents/epl-v10.php'
+      instruction 'Import-Package', '!com.codahale.metrics*, !com.bugsnag*, !com.librato.metrics*, *'
+    }
+    into ("META-INF/maven/io.moquette/${project.name}"){
+        from "build/pom.xml"
+    }
+}
+jar.dependsOn createPom

+ 0 - 282
broker/pom.xml

@@ -1,282 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <relativePath>../</relativePath>
-        <artifactId>moquette-parent</artifactId>
-        <groupId>io.moquette</groupId>
-        <version>0.11-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>moquette-broker</artifactId>
-    <packaging>jar</packaging>
-    <name>Moquette - broker</name>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <bintray.package>io.moquette.moquette-broker</bintray.package>
-    </properties>
-
-    <dependencies>
-
-        <!--<dependency>-->
-            <!--<groupId>${project.groupId}</groupId>-->
-            <!--<artifactId>moquette-mapdb-storage</artifactId>-->
-            <!--<version>${project.version}</version>-->
-        <!--</dependency>-->
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.7.5</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-common</artifactId>
-            <version>${netty.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-buffer</artifactId>
-            <version>${netty.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-transport</artifactId>
-            <version>${netty.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-handler</artifactId>
-            <version>${netty.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-codec</artifactId>
-            <version>${netty.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-codec-http</artifactId>
-            <version>${netty.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-codec-mqtt</artifactId>
-            <version>${netty.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-transport-native-epoll</artifactId>
-            <version>${netty.version}</version>
-            <classifier>linux-x86_64</classifier>
-            <!-- 
-            <classifier>${os.detected.name}-${os.detected.arch}</classifier>
-             -->
-        </dependency>
-
-        <dependency>
-            <groupId>io.dropwizard.metrics</groupId>
-            <artifactId>metrics-core</artifactId>
-            <version>3.2.2</version>
-        </dependency>
-        <dependency>
-            <groupId>io.dropwizard.metrics</groupId>
-            <artifactId>metrics-jvm</artifactId>
-            <version>3.2.2</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.librato.metrics</groupId>
-            <artifactId>metrics-librato</artifactId>
-            <version>5.1.0</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.librato.metrics</groupId>
-            <artifactId>librato-java</artifactId>
-            <version>2.1.0</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.bugsnag</groupId>
-            <artifactId>bugsnag</artifactId>
-            <version>[3.0,4.0)</version>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-            <version>1.10</version>
-        </dependency>
-
-        <!--<dependency>-->
-            <!--<groupId>org.hdrhistogram</groupId>-->
-            <!--<artifactId>HdrHistogram</artifactId>-->
-            <!--<version>2.1.4</version>-->
-        <!--</dependency>-->
-
-        <dependency>
-            <groupId>com.hazelcast</groupId>
-            <artifactId>hazelcast</artifactId>
-            <version>3.5.4</version>
-        </dependency>
-
-        <!-- Test dependencies -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.8.2</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.7.5</version>
-            <scope>test</scope>
-        </dependency>
-
-        <!-- needs extra dependencies: objenesis & hamcrest -->
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-core</artifactId>
-            <version>1.9.0</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.fusesource.mqtt-client</groupId>
-            <artifactId>mqtt-client</artifactId>
-            <version>1.12</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.paho</groupId>
-            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
-            <version>1.0.2</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.jetty.websocket</groupId>
-            <artifactId>websocket-client</artifactId>
-            <version>9.2.0.M1</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
-            <!-- use 2.6.0 for Java 7 projects -->
-            <version>2.6.0</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.awaitility</groupId>
-            <artifactId>awaitility</artifactId>
-            <version>3.0.0</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
-            <version>1.4.191</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <systemPropertyVariables>
-                        <io.netty.leakDetectionLevel>PARANOID</io.netty.leakDetectionLevel>
-                    </systemPropertyVariables>
-                    <includes>
-                        <include>**/*Test.java</include>
-                    </includes>
-                </configuration>
-            </plugin>
-
-            <!-- Generate the test-jar -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>3.0.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <!-- Includes to generate OSGi headers -->
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-                    </archive>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>
-                            <goal>manifest</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            io.moquette.persistence,
-                            io.moquette.server.config,
-                            io.moquette.spi,
-                            io.moquette.spi.impl.subscriptions,
-                        </Export-Package>
-                        <Embed-Dependency>
-                            com.bugsnag;bugsnag,
-                            com.librato.metrics;metrics-librato,
-                            com.librato.metrics;librato-java,
-                        </Embed-Dependency>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <distributionManagement>
-        <repository>
-            <id>bintray</id>
-            <url>https://api.bintray.com/maven/${bintray.repo}/${bintray.package}</url>
-        </repository>
-    </distributionManagement>
-</project>

+ 89 - 0
build.gradle

@@ -0,0 +1,89 @@
+allprojects  {
+  apply plugin: 'maven'
+
+  group = 'io.moquette'
+  version = '0.11-SNAPSHOT'
+}
+
+buildscript {
+  repositories {
+    maven {
+      url "https://plugins.gradle.org/m2/"
+    }
+  }
+  dependencies {
+    classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.8'
+    classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
+    classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
+  }
+}
+
+subprojects {
+
+  repositories {
+    mavenLocal()
+
+    maven { url "https://repo.eclipse.org/content/repositories/paho-releases/" }
+    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
+    maven { url "http://repo.maven.apache.org/maven2" }
+  }
+
+  apply from: new File(rootDir, 'gradle/java.gradle')
+  apply from: new File(rootDir, 'gradle/test.gradle')
+  apply from: new File(rootDir, 'gradle/lint.gradle')
+  apply plugin: 'com.jfrog.bintray'
+  apply plugin: 'eclipse'
+  apply plugin: 'net.ltgt.errorprone'
+  configurations.errorprone {
+    resolutionStrategy.force 'com.google.errorprone:error_prone_core:2.0.14'
+  }
+
+  ext {
+    nettyVersion = '4.1.12.Final'
+  }
+
+  task packageTests(type: Jar) {
+    from sourceSets.test.output
+    from sourceSets.test.allSource
+    from sourceSets.test.resources
+    classifier = 'tests'
+  }
+  artifacts.archives packageTests
+
+  dependencies {
+    compile group: 'org.slf4j', name: 'slf4j-api', version:'1.7.5'
+
+    testCompile group: 'junit', name: 'junit', version:'4.8.2'
+    testCompile group: 'org.slf4j', name: 'slf4j-log4j12', version:'1.7.5'
+    testCompile group: 'org.assertj', name: 'assertj-core', version:'2.6.0'
+    testCompile group: 'org.mockito', name: 'mockito-core', version:'1.9.0'
+    testCompile group: 'org.awaitility', name: 'awaitility', version: '3.0.0'
+
+  }
+
+  test {
+    systemProperties.put "moquette.path", "build/resources/test/"
+    systemProperties.put "io.netty.leakDetectionLevel", "paranoid"
+    testLogging {
+      exceptionFormat 'full'
+      events "passed", "skipped", "failed"
+    }
+  }
+
+  // Deploy set environment variables and run ./gradlew bintrayUpload
+  bintray {
+    user = System.getenv('BINTRAY_USER')
+    key = System.getenv('BINTRAY_KEY')
+    pkg {
+      repo = '${project.group}'
+      name = "${project.name}"
+      userOrg = 'andsel'
+      licenses = ['Apache-2.0']
+      vcsUrl = "https://api.bintray.com/maven/andsel/maven/${project.group}.${project.name}"
+    }
+  }
+}
+
+task wrapper(type: Wrapper) {
+  gradleVersion = '3.3'
+}

+ 63 - 0
distribution/build.gradle

@@ -0,0 +1,63 @@
+
+description = 'Moquette - distribution'
+
+apply plugin: 'application'
+
+// adds task shadowJar - Create a combined JAR of project and runtime dependencies
+apply plugin: 'com.github.johnrengelman.shadow'
+
+mainClassName = "io.moquette.server.Server"
+
+dependencies {
+  compile project(':moquette-broker')
+  compile project(':moquette-h2-storage')
+  compile project(':moquette-mapdb-storage')
+}
+
+def packageSet = project.copySpec {
+  from 'src/main/resources/README.txt'
+
+  into ('bin'){
+    from 'src/main/scripts/'
+    fileMode=0755
+  }
+
+  into ('lib'){
+    from "build/libs/${project.name}-${version}.jar"
+    rename { "moquette-${version}.jar" }
+  }
+
+  into ('lib'){
+    from configurations.compile
+  }
+
+  into ('config'){
+    from 'src/main/resources/moquette.conf'
+    from 'src/main/resources/password_file.conf'
+    from 'src/main/resources/hazelcast.xml'
+    // from 'src/main/resources/acl.conf'
+  }
+
+  into ('config'){
+    from 'src/main/resources/log4j.properties'
+    rename {  'moquette-log.properties' }
+  }
+}
+
+task distMoquetteTar(type: Tar) {
+  archiveName = "moquette-${version}.tar"
+  destinationDir  file('build')
+  extension 'tar'
+  compression = Compression.GZIP
+
+  with packageSet
+}
+distMoquetteTar.dependsOn jar
+
+task distMoquetteZip(type: Zip) {
+  archiveName = "moquette-${version}.zip"
+  destinationDir  file('build')
+
+  with packageSet
+}
+distMoquetteZip.dependsOn jar

+ 0 - 80
distribution/pom.xml

@@ -1,80 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <relativePath>../</relativePath>
-        <!--<relativePath>../pom.xml</relativePath>-->
-        <artifactId>moquette-parent</artifactId>
-        <groupId>io.moquette</groupId>
-        <version>0.11-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>distribution</artifactId>
-    <packaging>pom</packaging>
-    <name>Moquette - distribution</name>
-
-    <!-- Includes all modules -->
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>moquette-broker</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>moquette-h2-storage</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>moquette-mapdb-storage</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.7.5</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.7.5</version>
-            <scope>runtime</scope>
-        </dependency>
-    </dependencies>
-
-
-    <build>
-        <sourceDirectory>${basedir}/src/main/</sourceDirectory> <!-- Force default maven layout -->
-        <plugins>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <version>2.4</version>
-                <executions>
-                    <execution>
-                        <id>distribution-package</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <configuration>
-                            <!-- Specifies the configuration file of the assembly plugin -->
-                            <descriptors>
-                                <descriptor>${basedir}/src/main/assembly/assembly.xml</descriptor>
-                            </descriptors>
-                             <tarLongFileMode>gnu</tarLongFileMode>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-        </plugins>
-    </build>
-
-</project>    

+ 0 - 57
distribution/src/main/assembly/assembly.xml

@@ -1,57 +0,0 @@
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-    <id>bundle-tar</id>
-    <formats>
-        <format>tar.gz</format>
-        <!--<format>dir</format>--> 
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory> <!-- disable the creation of root's distribution dir in the archive -->
-	
-    <files>
-        <!-- executables scripts-->
-        <file>
-            <source>src/main/scripts/moquette.sh</source>
-            <outputDirectory>bin</outputDirectory>
-            <fileMode>0755</fileMode>
-        </file>
-
-        <file>
-            <source>src/main/scripts/moquette.bat</source>
-            <outputDirectory>bin</outputDirectory>
-        </file>
-        
-        <file>
-            <source>src/main/resources/log4j.properties</source>
-            <outputDirectory>config/</outputDirectory>
-            <destName>moquette-log.properties</destName>
-        </file>
-        
-        <file>
-            <source>src/main/resources/moquette.conf</source>
-            <outputDirectory>config/</outputDirectory>
-        </file>
-        
-        <file>
-            <source>src/main/resources/password_file.conf</source>
-            <outputDirectory>config/</outputDirectory>
-        </file>
-
-        <file>
-            <source>src/main/resources/hazelcast.xml</source>
-            <outputDirectory>config/</outputDirectory>
-        </file>
-        
-        <file>
-            <source>src/main/resources/README.txt</source>
-        </file>
-    </files>     
-    
-	
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>lib/</outputDirectory>
-            <useProjectArtifact>true</useProjectArtifact> <!-- avoid inclusion of the artifact itself --> 
-        </dependencySet>
-    </dependencySets>
-</assembly>

+ 5 - 0
embedding_moquette/build.gradle

@@ -0,0 +1,5 @@
+
+description = 'Moquette - Embedded test'
+dependencies {
+  compile project(':moquette-broker')
+}

+ 0 - 37
embedding_moquette/pom.xml

@@ -1,37 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <relativePath>../</relativePath>
-        <artifactId>moquette-parent</artifactId>
-        <groupId>io.moquette</groupId>
-        <version>0.11-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>moquette-embedded-test</artifactId>
-    <packaging>jar</packaging>
-    <name>Moquette - Embedded test</name>
-
-    <dependencies>
-        <dependency>
-            <groupId>io.moquette</groupId>
-            <artifactId>moquette-broker</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <!--<dependency>-->
-            <!--<groupId>org.slf4j</groupId>-->
-            <!--<artifactId>slf4j-log4j12</artifactId>-->
-            <!--<version>1.6.4</version>-->
-        <!--</dependency>-->
-        
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.8.2</version>
-            <scope>test</scope>
-        </dependency>
-        
-    </dependencies>
-
-</project>

+ 9 - 0
gradle/java.gradle

@@ -0,0 +1,9 @@
+apply plugin: 'java'
+apply plugin: 'jacoco'
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+tasks.withType(JavaCompile) {
+    options.encoding = 'UTF-8'
+}

+ 19 - 0
gradle/lint.gradle

@@ -0,0 +1,19 @@
+apply plugin: 'checkstyle'
+apply plugin: 'findbugs'
+
+checkstyle {
+    configProperties.checkstyleConfigDir = "."
+    configFile = new File(rootDir, 'checkstyle.xml')
+    ignoreFailures false
+    toolVersion = '6.7'
+}
+
+findbugs {
+    toolVersion = '3.0.1'
+    ignoreFailures true
+    omitVisitors = ['RuntimeExceptionCapture']
+}
+
+tasks.withType(FindBugs) {
+    maxHeapSize = '2g'
+}

+ 62 - 0
gradle/test.gradle

@@ -0,0 +1,62 @@
+test {
+    def outputReporter = new OutputReporter()
+    addTestListener(outputReporter)
+    addTestOutputListener(outputReporter)
+}
+
+class OutputReporter implements TestListener, TestOutputListener {
+
+    private StringBuilder stdout = new StringBuilder();
+    private StringBuilder stderr = new StringBuilder();
+
+    @Override
+    void beforeSuite(TestDescriptor suite) {
+
+    }
+
+    @Override
+    void afterSuite(TestDescriptor suite, TestResult result) {
+
+    }
+
+    @Override
+    void beforeTest(TestDescriptor testDescriptor) {
+        if (!testDescriptor.isComposite()) {
+            stdout.setLength(0);
+            stderr.setLength(0);
+        }
+    }
+
+    @Override
+    void afterTest(TestDescriptor testDescriptor, TestResult result) {
+        if (!testDescriptor.isComposite() && result.getResultType() == TestResult.ResultType.FAILURE) {
+            if (stdout.length() != 0) {
+                println ""
+                println "--- STDOUT ---"
+                print stdout
+                println "--- STDOUT ---"
+            }
+
+            if (stderr.length() != 0) {
+                println ""
+                println "--- STDERR ---"
+                println stderr
+                println "--- STDERR ---"
+            }
+
+        }
+    }
+
+    @Override
+    void onOutput(TestDescriptor testDescriptor, TestOutputEvent outputEvent) {
+        if (!testDescriptor.isComposite()) {
+            def buffer = (outputEvent.getDestination() == TestOutputEvent.Destination.StdOut) ? stdout : stderr;
+            buffer.append(outputEvent.getMessage());
+            if (outputEvent.getMessage().contains("LEAK:")) {
+                println stdout
+                println stderr
+                throw new RuntimeException("Netty ResourceLeakDetector");
+            }
+        }
+    }
+}

BIN
gradle/wrapper/gradle-wrapper.jar


+ 6 - 0
gradle/wrapper/gradle-wrapper.properties

@@ -0,0 +1,6 @@
+#Thu Aug 10 18:13:58 CEST 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip

+ 164 - 0
gradlew

@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

+ 90 - 0
gradlew.bat

@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

+ 23 - 0
h2_storage/build.gradle

@@ -0,0 +1,23 @@
+
+description = 'Moquette - H2 storage'
+
+apply plugin: 'osgi'
+apply plugin: 'maven'
+
+dependencies {
+  compile project(':moquette-broker')
+  compile group: 'com.h2database', name: 'h2-mvstore', version: '1.4.192'
+
+  testCompile project(path:':moquette-broker', configuration: 'archives')
+}
+
+task createPom () {
+    pom { }.writeTo("build/pom.xml")
+}
+
+jar {
+    into ("META-INF/maven/io.moquette/${project.name}"){
+        from "build/pom.xml"
+    }
+}
+jar.dependsOn createPom

+ 0 - 129
h2_storage/pom.xml

@@ -1,129 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <relativePath>../</relativePath>
-        <artifactId>moquette-parent</artifactId>
-        <groupId>io.moquette</groupId>
-        <version>0.11-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>moquette-h2-storage</artifactId>
-    <packaging>jar</packaging>
-    <name>Moquette - H2 storage</name>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <bintray.package>io.moquette.moquette-h2-storage </bintray.package>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>moquette-broker</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.7.5</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2-mvstore</artifactId>
-            <version>1.4.192</version>
-        </dependency>
-
-        <!-- Test dependencies -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.8.2</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.7.5</version>
-            <scope>test</scope>
-        </dependency>
-
-        <!-- needs extra dependencies: objenesis & hamcrest -->
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-core</artifactId>
-            <version>1.9.0</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
-            <!-- use 2.6.0 for Java 7 projects -->
-            <version>2.6.0</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>io.moquette</groupId>
-            <artifactId>moquette-broker</artifactId>
-            <type>test-jar</type>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <includes>
-                        <include>**/*Test.java</include>
-                    </includes>
-                </configuration>
-            </plugin>
-
-            <!-- Includes to generate OSGi headers -->
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-                    </archive>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>
-                            <goal>manifest</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <distributionManagement>
-        <repository>
-            <id>bintray</id>
-            <url>https://api.bintray.com/maven/${bintray.repo}/${bintray.package}</url>
-        </repository>
-    </distributionManagement>
-</project>

+ 23 - 0
mapdb_storage/build.gradle

@@ -0,0 +1,23 @@
+
+description = 'Moquette - MapDB storage'
+
+apply plugin: 'osgi'
+apply plugin: 'maven'
+
+dependencies {
+  compile project(':moquette-broker')
+  compile group: 'org.mapdb', name: 'mapdb', version:'1.0.8'
+
+  testCompile project(path:':moquette-broker', configuration: 'archives')
+}
+
+task createPom () {
+    pom { }.writeTo("build/pom.xml")
+}
+
+jar {
+    into ("META-INF/maven/io.moquette/${project.name}"){
+        from "build/pom.xml"
+    }
+}
+jar.dependsOn createPom

+ 0 - 129
mapdb_storage/pom.xml

@@ -1,129 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <relativePath>../</relativePath>
-        <artifactId>moquette-parent</artifactId>
-        <groupId>io.moquette</groupId>
-        <version>0.11-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>moquette-mapdb-storage</artifactId>
-    <packaging>jar</packaging>
-    <name>Moquette - MapDB storage</name>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <bintray.package>io.moquette.moquette-mapdb-storage </bintray.package>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>moquette-broker</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.7.5</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.mapdb</groupId>
-            <artifactId>mapdb</artifactId>
-            <version>1.0.8</version>
-        </dependency>
-
-        <!-- Test dependencies -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.8.2</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.7.5</version>
-            <scope>test</scope>
-        </dependency>
-
-        <!-- needs extra dependencies: objenesis & hamcrest -->
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-core</artifactId>
-            <version>1.9.0</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
-            <!-- use 2.6.0 for Java 7 projects -->
-            <version>2.6.0</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>io.moquette</groupId>
-            <artifactId>moquette-broker</artifactId>
-            <type>test-jar</type>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <includes>
-                        <include>**/*Test.java</include>
-                    </includes>
-                </configuration>
-            </plugin>
-
-            <!-- Includes to generate OSGi headers -->
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-                    </archive>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>
-                            <goal>manifest</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <distributionManagement>
-        <repository>
-            <id>bintray</id>
-            <url>https://api.bintray.com/maven/${bintray.repo}/${bintray.package}</url>
-        </repository>
-    </distributionManagement>
-</project>

+ 1 - 1
osgi_test/README.md

@@ -2,4 +2,4 @@
 
 to run the osgi tests use:
 
-    mvn clean && mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V && mvn -B test -pl osgi_test
+    ./gradlew install moquette-osgi-test:test --rerun-tasks

+ 22 - 0
osgi_test/build.gradle

@@ -0,0 +1,22 @@
+
+description = 'Moquette - OSGi test'
+
+ext {
+  paxExamVersion = '4.6.0'
+}
+
+dependencies {
+  compile project(':moquette-broker')
+  compile project(':moquette-h2-storage')
+  compile project(':moquette-mapdb-storage')
+
+  testCompile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.5'
+  testCompile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.5'
+
+  testCompile group: 'org.ops4j.pax.exam', name: 'pax-exam-container-native', version: paxExamVersion
+  testCompile group: 'org.ops4j.pax.exam', name: 'pax-exam-junit4', version: paxExamVersion
+  testCompile group: 'org.ops4j.pax.exam', name: 'pax-exam-link-mvn', version: paxExamVersion
+  testCompile group: 'org.ops4j.pax.url', name: 'pax-url-aether', version:'1.4.0'
+  testCompile group: 'org.apache.felix', name: 'org.apache.felix.framework', version:'5.0.0'
+  testCompile group: 'javax.inject', name: 'javax.inject', version:'1'
+}

+ 0 - 183
osgi_test/pom.xml

@@ -1,183 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <relativePath>../</relativePath>
-        <artifactId>moquette-parent</artifactId>
-        <groupId>io.moquette</groupId>
-        <version>0.11-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>moquette-osgi-test</artifactId>
-    <packaging>jar</packaging>
-    <name>Moquette - OSGi test</name>
-
-    <properties>
-        <pax.exam.version>4.6.0</pax.exam.version>
-        <url.version>1.4.0</url.version>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>io.moquette</groupId>
-            <artifactId>moquette-broker</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.moquette</groupId>
-            <artifactId>moquette-h2-storage</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.moquette</groupId>
-            <artifactId>moquette-mapdb-storage</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-            <version>3.1.0</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.7.5</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.7.5</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-container-native</artifactId>
-            <version>${pax.exam.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-junit4</artifactId>
-            <version>${pax.exam.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-link-mvn</artifactId>
-            <version>${pax.exam.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.url</groupId>
-            <artifactId>pax-url-aether</artifactId>
-            <version>${url.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.framework</artifactId>
-            <version>5.0.0</version>
-            <scope>test</scope>
-        </dependency>
-
-       <dependency>
-           <groupId>javax.inject</groupId>
-           <artifactId>javax.inject</artifactId>
-           <version>1</version>
-           <scope>test</scope>
-       </dependency>              
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <version>1.7</version>
-                <executions>
-                    <execution>
-                        <id>compile</id>
-                        <phase>compile</phase>
-                        <configuration>
-                            <target>
-                                <property name="compile_classpath" refid="maven.compile.classpath"/>
-                                <property name="runtime_classpath" refid="maven.runtime.classpath"/>
-                                <property name="test_classpath" refid="maven.test.classpath"/>
-                                <property name="plugin_classpath" refid="maven.plugin.classpath"/>
-
-                                <echo message="compile classpath: ${compile_classpath}"/>
-                                <echo message="runtime classpath: ${runtime_classpath}"/>
-                                <echo message="test classpath:    ${test_classpath}"/>
-                                <echo message="plugin classpath:  ${plugin_classpath}"/>
-                            </target>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>org.ops4j.pax.exam</groupId>
-                <artifactId>exam-maven-plugin</artifactId>
-                <version>${pax.exam.version}</version>
-                <configuration>
-                    <configClass>io.moquette.test.osgi.MoquetteOsgiTest</configClass>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>start-container</goal>
-                            <goal>stop-container</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.servicemix.tooling</groupId>
-                <artifactId>depends-maven-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <id>generate-depends-file</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>generate-depends-file</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-failsafe-plugin</artifactId>
-                <version>2.12</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>integration-test</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <forkMode>always</forkMode>
-                    <parallel>none</parallel>
-                    <threadCount>1</threadCount>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>

+ 28 - 38
osgi_test/src/test/java/io/moquette/test/osgi/MoquetteOsgiTest.java

@@ -16,11 +16,14 @@
 
 package io.moquette.test.osgi;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.fail;
 import static org.ops4j.pax.exam.CoreOptions.*;
+
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import javax.inject.Inject;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Configuration;
@@ -30,7 +33,6 @@ import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import javax.inject.Inject;
 
 /**
  * Run a set of unit tests inside of an OSGi container to make sure
@@ -45,46 +47,34 @@ public class MoquetteOsgiTest {
     private BundleContext bundleContext;
 
     @Configuration
-    public Option[] config() {
+    public Option[] config() throws IOException {
+        String nettyV = "4.1.12.Final";
 
         return options(
             junitBundles(),
 
-            mavenBundle("com.google.guava", "guava").versionAsInProject(),
-            //mavenBundle("com.google.code.findbugs", "jsr305").versionAsInProject(),
-
-            mavenBundle("com.fasterxml.jackson.core", "jackson-core").versionAsInProject().start(),
-            mavenBundle("com.fasterxml.jackson.core", "jackson-databind").versionAsInProject(),
-            mavenBundle("com.fasterxml.jackson.core", "jackson-annotations").versionAsInProject(),
-            //mavenBundle("com.librato.metrics", "librato-java").versionAsInProject(),
-            //mavenBundle("com.librato.metrics", "metrics-librato").versionAsInProject(),
-            mavenBundle("io.dropwizard.metrics", "metrics-core").versionAsInProject(),
-            mavenBundle("io.dropwizard.metrics", "metrics-jvm").versionAsInProject(),
-            mavenBundle("com.hazelcast", "hazelcast").versionAsInProject(),
-
-            mavenBundle("io.netty", "netty-common").versionAsInProject(),
-            mavenBundle("io.netty", "netty-buffer").versionAsInProject(),
-            mavenBundle("io.netty", "netty-transport").versionAsInProject(),
-            mavenBundle("io.netty", "netty-resolver").versionAsInProject(),
-            mavenBundle("io.netty", "netty-handler").versionAsInProject(),
-            mavenBundle("io.netty", "netty-handler").versionAsInProject(),
-            mavenBundle("io.netty", "netty-codec").versionAsInProject(),
-            mavenBundle("io.netty", "netty-codec-http").versionAsInProject(),
-            mavenBundle("io.netty", "netty-codec-mqtt").versionAsInProject(),
-            mavenBundle("io.netty", "netty-transport-native-epoll").versionAsInProject(),
-            mavenBundle("io.netty", "netty-transport-native-unix-common").versionAsInProject(),
-
-            mavenBundle("commons-codec", "commons-codec").versionAsInProject(),
-
-            mavenBundle("javax.servlet", "javax.servlet-api").versionAsInProject(),
-
-            mavenBundle("io.moquette", "moquette-broker").versionAsInProject(),
-
-            mavenBundle("com.h2database", "h2-mvstore").versionAsInProject(),
-            mavenBundle("io.moquette", "moquette-h2-storage").versionAsInProject(),
-
-            mavenBundle("org.mapdb", "mapdb").versionAsInProject(),
-            mavenBundle("io.moquette", "moquette-mapdb-storage").versionAsInProject()
+            mavenBundle("com.hazelcast", "hazelcast"),
+
+            mavenBundle("io.netty", "netty-common", nettyV),
+            mavenBundle("io.netty", "netty-buffer", nettyV),
+            mavenBundle("io.netty", "netty-transport", nettyV),
+            mavenBundle("io.netty", "netty-resolver", nettyV),
+            mavenBundle("io.netty", "netty-handler", nettyV),
+            mavenBundle("io.netty", "netty-codec", nettyV),
+            mavenBundle("io.netty", "netty-codec-http", nettyV),
+            mavenBundle("io.netty", "netty-codec-mqtt", nettyV),
+            mavenBundle("io.netty", "netty-transport-native-epoll", nettyV),
+            mavenBundle("io.netty", "netty-transport-native-unix-common", nettyV),
+
+            mavenBundle("commons-codec", "commons-codec"),
+
+            mavenBundle("io.moquette", "moquette-broker"),
+
+            mavenBundle("com.h2database", "h2-mvstore"),
+            mavenBundle("io.moquette", "moquette-h2-storage"),
+
+            mavenBundle("org.mapdb", "mapdb", "1.0.8"),
+            mavenBundle("io.moquette", "moquette-mapdb-storage")
         );
     }
 

+ 9 - 0
perf/build.gradle

@@ -0,0 +1,9 @@
+
+description = 'Moquette - performance tests'
+dependencies {
+  compile project(':moquette-broker')
+  compile group: 'io.netty', name: 'netty-codec-mqtt', version:"${nettyVersion}"
+  compile group: 'org.hdrhistogram', name: 'HdrHistogram', version:'2.1.2'
+  compile group: 'org.eclipse.paho', name: 'org.eclipse.paho.client.mqttv3', version:'1.1.0'
+  compile group: 'org.eclipse.jetty.toolchain', name: 'jetty-perf-helper', version:'1.0.5'
+}

+ 0 - 142
perf/pom.xml

@@ -1,142 +0,0 @@
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <relativePath>../</relativePath>
-        <artifactId>moquette-parent</artifactId>
-        <groupId>io.moquette</groupId>
-        <version>0.11-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>moquette-performance</artifactId>
-    <packaging>jar</packaging>
-    <name>Moquette - performance tests</name>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <bintray.package>io.moquette.moquette-performance</bintray.package>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>moquette-broker</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>moquette-broker</artifactId>
-            <version>${project.version}</version>
-            <type>test-jar</type>
-        </dependency>
-
-        <!--<dependency>-->
-            <!--<groupId>io.netty</groupId>-->
-            <!--<artifactId>netty-common</artifactId>-->
-            <!--<version>${netty.version}</version>-->
-        <!--</dependency>-->
-        <!---->
-        <!--<dependency>-->
-            <!--<groupId>io.netty</groupId>-->
-            <!--<artifactId>netty-buffer</artifactId>-->
-            <!--<version>${netty.version}</version>-->
-        <!--</dependency>-->
-        <!---->
-        <!--<dependency>-->
-            <!--<groupId>io.netty</groupId>-->
-            <!--<artifactId>netty-transport</artifactId>-->
-            <!--<version>${netty.version}</version>-->
-        <!--</dependency>-->
-        <!---->
-        <!--<dependency>-->
-            <!--<groupId>io.netty</groupId>-->
-            <!--<artifactId>netty-handler</artifactId>-->
-            <!--<version>${netty.version}</version>-->
-        <!--</dependency>-->
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.6.4</version>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-codec-mqtt</artifactId>
-            <version>${netty.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.hdrhistogram</groupId>
-            <artifactId>HdrHistogram</artifactId>
-            <version>2.1.2</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.paho</groupId>
-            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
-            <version>1.1.0</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.jetty.toolchain</groupId>
-            <artifactId>jetty-perf-helper</artifactId>
-            <version>1.0.5</version>
-        </dependency>
-
-
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.8.2</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>io/moquette/parser/netty/TestUtils.java</exclude>
-                        <exclude>io/moquette/parser/netty/TestUtils$*</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-
-	    <!-- Includes to generate OSGi headers -->
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>  
-                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-                    </archive> 
-                </configuration>
-            </plugin>  
-            <plugin>   
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>    
-                            <goal>manifest</goal>
-                        </goals>   
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-    
-    <distributionManagement>
-        <repository>
-            <id>bintray</id>
-            <url>https://api.bintray.com/maven/${bintray.repo}/${bintray.package}</url>
-        </repository>
-    </distributionManagement>
-</project>

+ 0 - 235
pom.xml

@@ -1,235 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <netty.version>4.1.12.Final</netty.version>
-        <source.version>1.8</source.version>
-        <target.version>1.8</target.version>
-        <bintray.repo>andsel/maven</bintray.repo>
-        <bintray.parent.package>io.moquette.moquette-parent</bintray.parent.package>
-    </properties>
-
-    <groupId>io.moquette</groupId>
-    <artifactId>moquette-parent</artifactId>
-
-    <packaging>pom</packaging>
-    <version>0.11-SNAPSHOT</version>
-    <name>Moquette MQTT</name>
-    <description>Moquette lightweight MQTT Broker</description>
-    <inceptionYear>2011</inceptionYear>
-    <url>https://github.com/andsel/moquette/</url>
-
-    <licenses>
-        <license>
-            <name>The Apache License, Version 2.0</name>
-            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-        <license>
-            <name>Eclipse Public License - Version 1.0</name>
-            <url>http://www.eclipse.org/org/documents/epl-v10.php</url>
-        </license>
-    </licenses>
-
-    <developers>
-        <developer>
-            <id>andsel</id>
-            <name>Andrea Selva</name>
-            <roles>
-                <role>architect</role>
-                <role>developer</role>
-                <role>founder</role>
-            </roles>
-            <timezone>+1</timezone>
-        </developer>
-    </developers>
-
-    <contributors>
-        <contributor>
-            <name>Steven Warwick</name>
-            <url>http://stevenwarwick.com</url>
-        </contributor>
-        <contributor>
-            <name>Igor Yova</name>
-            <url>https://github.com/Fameing</url>
-        </contributor>
-        <contributor>
-            <name>Luca Capra</name>
-            <url>https://github.com/muka</url>
-        </contributor>
-        <contributor>
-            <name>Wagner Macedo</name>
-            <url>https://github.com/wagnerluis1982</url>
-        </contributor>
-        <contributor>
-            <name>Luis Barrios</name>
-            <url>https://github.com/lbarriosh</url>
-        </contributor>
-        <contributor>
-            <name>Christophe Mourette</name>
-            <url>https://github.com/mackristof</url>
-        </contributor>
-        <contributor>
-            <name>Victor Kazakov</name>
-            <url>https://github.com/kazvictor</url>
-        </contributor>
-        <contributor>
-            <name>Neeme Praks</name>
-            <url>https://github.com/nemecec</url>
-        </contributor>
-        <contributor>
-            <name>Kevin Berendsen</name>
-            <url>https://github.com/kevto</url>
-        </contributor>
-        <contributor>
-            <name>Chris Schaefer</name>
-            <url>https://github.com/windbender</url>
-        </contributor>
-        <contributor>
-            <name>Keith Hughes</name>
-            <url>http://www.inhabitech.com/blog/author/keith/</url>
-        </contributor>
-        <contributor>
-            <name>Luca Capra</name>
-            <email>luca.capra@create-net.org</email>
-        </contributor>
-        <contributor>
-            <name>konradm</name>
-        </contributor>
-        <contributor>
-            <name>pkhanal</name>
-        </contributor>
-    </contributors>
-
-    <scm>
-        <connection>scm:git:git@github.com:andsel/moquette.git</connection>
-        <developerConnection>scm:git:git@github.com:andsel/moquette.git</developerConnection>
-        <url>git@github.com:andsel/moquette.git</url>
-    </scm>
-
-    <modules>
-        <module>broker</module>
-        <module>mapdb_storage</module>
-        <module>h2_storage</module>
-        <module>distribution</module>
-        <module>embedding_moquette</module>
-        <module>osgi_test</module>
-        <module>perf</module>
-    </modules>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>cobertura-maven-plugin</artifactId>
-                <version>2.6</version>
-            </plugin>
-        </plugins>
-    </reporting>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>${source.version}</source>
-                    <target>${target.version}</target>
-                </configuration>
-            </plugin>
-            <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-checkstyle-plugin</artifactId>
-              <version>2.17</version>
-              <configuration>
-                  <configLocation>checkstyle.xml</configLocation>
-                  <suppressionsLocation>checkstyle-suppressions.xml</suppressionsLocation>
-                  <!--
-                     <configLocation>/google_checks.xml</configLocation>
-                   -->
-                  <failOnViolation>true</failOnViolation>
-                  <consoleOutput>true</consoleOutput>
-              </configuration>
-              <executions>
-                <execution>
-                  <phase>validate</phase>
-                  <goals>
-                    <goal>check</goal>
-                  </goals>
-                </execution>
-              </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>release-sign-artifacts</id>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-source-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>attach-sources</id>
-                                <goals>
-                                    <goal>jar</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-javadoc-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>attach-javadocs</id>
-                                <goals>
-                                    <goal>jar</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-gpg-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>sign-artifacts</id>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>sign</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-    <repositories>
-        <repository>
-            <id>Paho Releases</id>
-            <url>https://repo.eclipse.org/content/repositories/paho-releases/</url>
-        </repository>
-
-        <repository>
-            <id>sonatype-snapshots</id>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
-        </repository>
-    </repositories>
-
-    <distributionManagement>
-        <repository>
-            <id>bintray</id>
-            <url>https://api.bintray.com/maven/${bintray.repo}/${bintray.parent.package}</url>
-        </repository>
-    </distributionManagement>
-</project>

+ 16 - 0
settings.gradle

@@ -0,0 +1,16 @@
+rootProject.name = 'moquette-parent'
+include ':moquette-broker'
+include ':distribution'
+include ':moquette-h2-storage'
+include ':moquette-mapdb-storage'
+include ':moquette-embedded-test'
+include ':moquette-osgi-test'
+include ':moquette-performance'
+
+project(':moquette-broker').projectDir = "$rootDir/broker" as File
+project(':distribution').projectDir = "$rootDir/distribution" as File
+project(':moquette-embedded-test').projectDir = "$rootDir/embedding_moquette" as File
+project(':moquette-osgi-test').projectDir = "$rootDir/osgi_test" as File
+project(':moquette-performance').projectDir = "$rootDir/perf" as File
+project(':moquette-h2-storage').projectDir = "$rootDir/h2_storage" as File
+project(':moquette-mapdb-storage').projectDir = "$rootDir/mapdb_storage" as File