You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zipkin.apache.org by ab...@apache.org on 2019/01/30 17:41:46 UTC

[incubator-zipkin-brave-karaf] 05/42: Add exporter for Brave and Reporter service (#1)

This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch test-jenkins-github-integration
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-brave-karaf.git

commit 4d87ae198b64b9cc7312800b4867881a3679a33f
Author: Christian Schneider <ch...@die-schneider.net>
AuthorDate: Fri Dec 9 17:54:17 2016 +0100

    Add exporter for Brave and Reporter service (#1)
---
 .gitignore                                         |   1 +
 brave-exporter/pom.xml                             |  83 +++
 .../zipkin/brave/osgi/exporter/BraveExporter.java  |  66 +++
 .../urlconnect/SenderUrlConnectExporter.java       |  71 +++
 brave-features/src/main/resources/features.xml     |   5 +-
 brave-itests/.classpath                            |  31 -
 brave-itests/pom.xml                               |   1 -
 .../java/io/zipkin/brave/itests/BraveTest.java     |   2 +-
 pom.xml                                            | 636 ++++++++++-----------
 9 files changed, 533 insertions(+), 363 deletions(-)

diff --git a/.gitignore b/.gitignore
index 40b20c3..249346c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@
 # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
 hs_err_pid*
 
+.classpath
 .project
 .settings
 target
diff --git a/brave-exporter/pom.xml b/brave-exporter/pom.xml
new file mode 100644
index 0000000..e1b38b5
--- /dev/null
+++ b/brave-exporter/pom.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright 2016 The OpenZipkin Authors
+
+    Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+    in compliance with the License. You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software distributed under the License
+    is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+    or implied. See the License for the specific language governing permissions and limitations under
+    the License.
+
+-->
+<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>
+		<groupId>io.zipkin.brave.karaf</groupId>
+		<artifactId>brave-karaf-parent</artifactId>
+		<version>1.0.0-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>brave-exporter</artifactId>
+	
+	<properties>
+        <main.basedir>${project.basedir}/..</main.basedir>
+	</properties>
+	
+	<dependencies>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>osgi.core</artifactId>
+			<version>6.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>osgi.cmpn</artifactId>
+			<version>6.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>io.zipkin.brave</groupId>
+			<artifactId>brave-core</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>io.zipkin.reporter</groupId>
+			<artifactId>zipkin-reporter</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>io.zipkin.reporter</groupId>
+			<artifactId>zipkin-sender-urlconnection</artifactId>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>biz.aQute.bnd</groupId>
+				<artifactId>bnd-maven-plugin</artifactId>
+				<version>3.3.0</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>bnd-process</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<version>3.0.2</version>
+				<configuration>
+					<archive>
+						<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+					</archive>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>
\ No newline at end of file
diff --git a/brave-exporter/src/main/java/io/zipkin/brave/osgi/exporter/BraveExporter.java b/brave-exporter/src/main/java/io/zipkin/brave/osgi/exporter/BraveExporter.java
new file mode 100644
index 0000000..04b9536
--- /dev/null
+++ b/brave-exporter/src/main/java/io/zipkin/brave/osgi/exporter/BraveExporter.java
@@ -0,0 +1,66 @@
+/**
+ * Copyright 2016 The OpenZipkin Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package io.zipkin.brave.osgi.exporter;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import com.github.kristofa.brave.Brave;
+import com.github.kristofa.brave.Sampler;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+import zipkin.Span;
+import zipkin.reporter.Reporter;
+
+@Component //
+( //
+    immediate = true, //
+    name = "io.zipkin.brave" //
+)
+@Designate(ocd = BraveExporter.Config.class)
+public class BraveExporter {
+    @Reference
+    Reporter<Span> reporter;
+
+    private ServiceRegistration<Brave> reg;
+
+    @ObjectClassDefinition(name = "Brave")
+    @interface Config {
+        String name() default "default";
+        boolean traceId128Bit() default false;
+        float rate() default 1;
+    }
+
+    @Activate
+    public void activate(Config config, BundleContext context, Map<String, String> properties) {
+        Brave brave = new Brave.Builder(config.name())
+            .reporter(reporter) //
+            .traceId128Bit(config.traceId128Bit()) //
+            .traceSampler(Sampler.create(config.rate()))
+            .build();
+        reg = context.registerService(Brave.class, brave, new Hashtable<String, String>(properties));
+    }
+    
+    @Deactivate
+    public void deactive() {
+        reg.unregister();
+    }
+
+}
diff --git a/brave-exporter/src/main/java/io/zipkin/brave/osgi/exporter/urlconnect/SenderUrlConnectExporter.java b/brave-exporter/src/main/java/io/zipkin/brave/osgi/exporter/urlconnect/SenderUrlConnectExporter.java
new file mode 100644
index 0000000..94f85b9
--- /dev/null
+++ b/brave-exporter/src/main/java/io/zipkin/brave/osgi/exporter/urlconnect/SenderUrlConnectExporter.java
@@ -0,0 +1,71 @@
+/**
+ * Copyright 2016 The OpenZipkin Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package io.zipkin.brave.osgi.exporter.urlconnect;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.ConfigurationPolicy;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+import zipkin.Span;
+import zipkin.reporter.AsyncReporter;
+import zipkin.reporter.Reporter;
+import zipkin.reporter.urlconnection.URLConnectionSender;
+
+@Component //
+( //
+    immediate = true, //
+    name = "io.zipkin.reporter.urlconnect", //
+    configurationPolicy = ConfigurationPolicy.REQUIRE
+)
+@Designate(ocd = SenderUrlConnectExporter.Config.class)
+public class SenderUrlConnectExporter {
+
+    @SuppressWarnings("rawtypes")
+    private ServiceRegistration<Reporter> reg;
+    private AsyncReporter<Span> reporter;
+
+    @ObjectClassDefinition(name = "Zipkin Reporter URLConnect")
+    @interface Config {
+        String endpoint() default "http://localhost:9411/api/v1/spans";
+        boolean compressionEnabled() default true;
+        int connectTimeout() default 10 * 1000;
+        int messageMaxBytes() default 5 * 1024 * 1024;
+    }
+
+    @Activate
+    public void activate(Config config, BundleContext context, Map<String,String> properties) {
+        URLConnectionSender sender = URLConnectionSender.builder()
+            .endpoint(config.endpoint()) //
+            .compressionEnabled(config.compressionEnabled()) //
+            .connectTimeout(config.connectTimeout())
+            .messageMaxBytes(config.messageMaxBytes())
+            .build();
+        reporter = AsyncReporter.builder(sender).build();
+        reg = context.registerService(Reporter.class, reporter, new Hashtable<String, String>(properties));
+    }
+    
+    @Deactivate
+    public void deactive() {
+        reg.unregister();
+        reporter.close();
+    }
+
+}
diff --git a/brave-features/src/main/resources/features.xml b/brave-features/src/main/resources/features.xml
index 2b70909..d2fe602 100644
--- a/brave-features/src/main/resources/features.xml
+++ b/brave-features/src/main/resources/features.xml
@@ -18,13 +18,13 @@
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
 
-	<repository>mvn:org.apache.cxf.karaf/apache-cxf/3.1.8/xml/features</repository>
-
 	<feature name="brave-core">
+		<feature>scr</feature>
 		<bundle dependency="true">mvn:io.zipkin.java/zipkin/${zipkin.version}</bundle>
 		<bundle dependency="true">mvn:io.zipkin.reporter/zipkin-reporter/${zipkin.reporter.version}</bundle>
 		<bundle>mvn:io.zipkin.reporter/zipkin-sender-urlconnection/${zipkin.reporter.version}</bundle>
 		<bundle>mvn:io.zipkin.brave/brave-core/${brave.version}</bundle>
+		<bundle>mvn:io.zipkin.brave.karaf/brave-exporter/${project.version}</bundle>
 	</feature>
 	
 	<feature name="brave-kafka">
@@ -35,6 +35,7 @@
 	
 	<feature name="brave-jaxrs2">
 		<feature>brave-core</feature>
+		<bundle dependency="true">mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jsr339-api-2.0.1/2.6.0</bundle>
 		<bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.javax-inject/1_2</bundle>
 		<bundle dependency="true">mvn:io.zipkin.brave/brave-http/${brave.version}</bundle>
 		<bundle>mvn:io.zipkin.brave/brave-jaxrs2/${brave.version}</bundle>
diff --git a/brave-itests/.classpath b/brave-itests/.classpath
deleted file mode 100644
index b2acffc..0000000
--- a/brave-itests/.classpath
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" output="target/classes" path="src/main/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/brave-itests/pom.xml b/brave-itests/pom.xml
index 2836630..46a39e6 100644
--- a/brave-itests/pom.xml
+++ b/brave-itests/pom.xml
@@ -39,7 +39,6 @@
 		<dependency>
 			<groupId>io.zipkin.brave</groupId>
 			<artifactId>brave-core</artifactId>
-			<version>${brave.version}</version>
 		</dependency>
 
 		<dependency>
diff --git a/brave-itests/src/test/java/io/zipkin/brave/itests/BraveTest.java b/brave-itests/src/test/java/io/zipkin/brave/itests/BraveTest.java
index 898817b..abdd14f 100644
--- a/brave-itests/src/test/java/io/zipkin/brave/itests/BraveTest.java
+++ b/brave-itests/src/test/java/io/zipkin/brave/itests/BraveTest.java
@@ -43,7 +43,7 @@ import zipkin.reporter.Reporter;
 @RunWith(PaxExam.class)
 @ExamReactorStrategy(PerClass.class)
 public class BraveTest {
-    List<Object> spans = new ArrayList<>();
+    List<Span> spans = new ArrayList<Span>();
 
     @Configuration
     public static Option[] configuration() throws Exception {
diff --git a/pom.xml b/pom.xml
index 89d7f78..e032207 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,332 +14,312 @@
     the License.
 
 -->
-<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>
-
-  <groupId>io.zipkin.brave.karaf</groupId>
-  <artifactId>brave-karaf-parent</artifactId>
-  <version>1.0.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <modules>
-      <module>brave-features</module>
-      <module>brave-itests</module>
-  </modules>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <project.build.resourceEncoding>UTF-8</project.build.resourceEncoding>
-
-    <!-- default bytecode version for src/main -->
-    <main.java.version>1.6</main.java.version>
-    <main.signature.artifact>java16</main.signature.artifact>
-
-    <main.basedir>${project.basedir}</main.basedir>
-
-    <license-maven-plugin.version>2.11</license-maven-plugin.version>
-
-    <brave.version>3.16.0</brave.version>
-    <zipkin.version>1.16.0</zipkin.version>
-    <zipkin.reporter.version>0.6.7</zipkin.reporter.version>
-
-    <slf4j.version>1.7.21</slf4j.version>
-  </properties>
-
-  <name>Brave Karaf Parent</name>
-  <description>Brave Karaf Parent</description>
-  <url>https://github.com/openzipkin/brave-karaf</url>
-  <inceptionYear>2016</inceptionYear>
-
-  <organization>
-    <name>OpenZipkin</name>
-    <url>http://zipkin.io/</url>
-  </organization>
-
-  <licenses>
-    <license>
-      <name>The Apache Software License, Version 2.0</name>
-      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-
-  <scm>
-    <url>https://github.com/openzipkin/brave-karaf</url>
-    <connection>scm:git:https://github.com/openzipkin/brave-karaf</connection>
-    <developerConnection>scm:git:https://github.com/openzipkin/brave-karaf</developerConnection>
-    <tag>0.0.1</tag>
-  </scm>
-
-  <developers>
-  </developers>
-
-  <distributionManagement>
-    <repository>
-      <id>bintray</id>
-      <url>https://api.bintray.com/maven/openzipkin/maven/brave-karaf/;publish=1</url>
-    </repository>
-    <snapshotRepository>
-      <id>jfrog-snapshots</id>
-      <url>http://oss.jfrog.org/artifactory/oss-snapshot-local</url>
-    </snapshotRepository>
-  </distributionManagement>
-
-  <issueManagement>
-    <system>Github</system>
-    <url>https://github.com/openzipkin/brave-karaf/issues</url>
-  </issueManagement>
-
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>io.zipkin.java</groupId>
-        <artifactId>zipkin</artifactId>
-        <version>${zipkin.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>io.zipkin.reporter</groupId>
-        <artifactId>zipkin-reporter</artifactId>
-        <version>${zipkin.reporter.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>4.12</version>
-      </dependency>
-      <dependency>
-        <groupId>org.awaitility</groupId>
-        <artifactId>awaitility</artifactId>
-        <version>2.0.0</version>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
-  <dependencies>
-    <dependency>
-      <groupId>io.zipkin.java</groupId>
-      <artifactId>zipkin</artifactId>
-    </dependency>
-
-    <!-- don't worry. auto-* are source retention, not runtime -->
-    <dependency>
-      <groupId>com.google.auto.value</groupId>
-      <artifactId>auto-value</artifactId>
-      <version>1.3</version>
-      <scope>provided</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <version>3.5.2</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>io.zipkin.java</groupId>
-      <artifactId>zipkin</artifactId>
-      <version>${zipkin.version}</version>
-      <type>test-jar</type>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <version>1.1.7</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <!-- mvn -N io.takari:maven:wrapper -Dmaven=3.3.9 -->
-        <plugin>
-          <groupId>io.takari</groupId>
-          <artifactId>maven</artifactId>
-          <version>0.3.3</version>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-
-    <plugins>
-      <plugin>
-        <inherited>true</inherited>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.5.1</version>
-        <configuration>
-          <!-- Retrolambda will rewrite lambdas as Java 6 bytecode -->
-          <source>1.8</source>
-          <target>1.8</target>
-          <compilerId>javac-with-errorprone</compilerId>
-          <forceJavacCompilerUse>true</forceJavacCompilerUse>
-          <showWarnings>true</showWarnings>
-        </configuration>
-        <dependencies>
-          <dependency>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-compiler-javac-errorprone</artifactId>
-            <version>2.8</version>
-          </dependency>
-          <dependency>
-            <groupId>com.google.errorprone</groupId>
-            <artifactId>error_prone_core</artifactId>
-            <version>2.0.9</version>
-          </dependency>
-        </dependencies>
-      </plugin>
-
-      <plugin>
-        <groupId>net.orfjackal.retrolambda</groupId>
-        <artifactId>retrolambda-maven-plugin</artifactId>
-        <version>2.3.0</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>process-main</goal>
-            </goals>
-            <configuration>
-              <target>${main.java.version}</target>
-              <fork>false</fork>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>animal-sniffer-maven-plugin</artifactId>
-        <version>1.15</version>
-        <configuration>
-          <signature>
-            <groupId>org.codehaus.mojo.signature</groupId>
-            <artifactId>${main.signature.artifact}</artifactId>
-            <version>1.0</version>
-          </signature>
-        </configuration>
-        <executions>
-          <execution>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-
-      <!-- Ensures checksums are added to published jars -->
-      <plugin>
-        <artifactId>maven-install-plugin</artifactId>
-        <version>2.5.2</version>
-        <configuration>
-          <createChecksum>true</createChecksum>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <groupId>com.mycila</groupId>
-        <artifactId>license-maven-plugin</artifactId>
-        <version>${license-maven-plugin.version}</version>
-        <configuration>
-          <header>${main.basedir}/src/etc/header.txt</header>
-          <excludes>
-            <exclude>.travis.yml</exclude>
-            <exclude>.gitignore</exclude>
-            <exclude>.mvn/**</exclude>
-            <exclude>mvnw*</exclude>
-            <exclude>etc/header.txt</exclude>
-            <exclude>**/.idea/**</exclude>
-            <exclude>LICENSE</exclude>
-            <exclude>**/*.md</exclude>
-            <exclude>src/test/resources/**</exclude>
-            <exclude>src/main/resources/**</exclude>
-          </excludes>
-          <strictCheck>true</strictCheck>
-        </configuration>
-        <dependencies>
-          <dependency>
-            <groupId>com.mycila</groupId>
-            <artifactId>license-maven-plugin-git</artifactId>
-            <version>${license-maven-plugin.version}</version>
-          </dependency>
-        </dependencies>
-        <executions>
-          <execution>
-            <goals>
-              <goal>check</goal>
-            </goals>
-            <phase>compile</phase>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-release-plugin</artifactId>
-        <version>2.5.3</version>
-        <configuration>
-          <useReleaseProfile>false</useReleaseProfile>
-          <releaseProfiles>release</releaseProfiles>
-          <autoVersionSubmodules>true</autoVersionSubmodules>
-          <tagNameFormat>@{project.version}</tagNameFormat>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <groupId>io.zipkin.centralsync-maven-plugin</groupId>
-        <artifactId>centralsync-maven-plugin</artifactId>
-        <version>0.1.0</version>
-        <configuration>
-          <packageName>zipkin-aws</packageName>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <profile>
-      <id>release</id>
-      <build>
-        <plugins>
-          <!-- Creates source jar -->
-          <plugin>
-            <artifactId>maven-source-plugin</artifactId>
-            <version>3.0.1</version>
-            <executions>
-              <execution>
-                <id>attach-sources</id>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-
-          <plugin>
-            <artifactId>maven-javadoc-plugin</artifactId>
-            <version>2.10.4</version>
-            <configuration>
-              <failOnError>false</failOnError>
-              <excludePackageNames>zipkin.aws.internal,zipkin.aws.internal.*
-              </excludePackageNames>
-              <!-- hush pedantic warnings: we don't put param and return on everything! -->
-              <additionalparam>-Xdoclint:none</additionalparam>
-            </configuration>
-            <executions>
-              <execution>
-                <id>attach-javadocs</id>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-                <phase>package</phase>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
+<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>
+
+	<groupId>io.zipkin.brave.karaf</groupId>
+	<artifactId>brave-karaf-parent</artifactId>
+	<version>1.0.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<modules>
+		<module>brave-features</module>
+		<module>brave-itests</module>
+		<module>brave-exporter</module>
+	</modules>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.build.resourceEncoding>UTF-8</project.build.resourceEncoding>
+
+		<!-- default bytecode version for src/main -->
+		<main.java.version>1.6</main.java.version>
+		<main.signature.artifact>java16</main.signature.artifact>
+
+		<main.basedir>${project.basedir}</main.basedir>
+
+		<license-maven-plugin.version>2.11</license-maven-plugin.version>
+
+		<brave.version>3.16.0</brave.version>
+		<zipkin.version>1.16.0</zipkin.version>
+		<zipkin.reporter.version>0.6.9</zipkin.reporter.version>
+
+		<slf4j.version>1.7.21</slf4j.version>
+	</properties>
+
+	<name>Brave Karaf Parent</name>
+	<description>Brave Karaf Parent</description>
+	<url>https://github.com/openzipkin/brave-karaf</url>
+	<inceptionYear>2016</inceptionYear>
+
+	<organization>
+		<name>OpenZipkin</name>
+		<url>http://zipkin.io/</url>
+	</organization>
+
+	<licenses>
+		<license>
+			<name>The Apache Software License, Version 2.0</name>
+			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+			<distribution>repo</distribution>
+		</license>
+	</licenses>
+
+	<scm>
+		<url>https://github.com/openzipkin/brave-karaf</url>
+		<connection>scm:git:https://github.com/openzipkin/brave-karaf</connection>
+		<developerConnection>scm:git:https://github.com/openzipkin/brave-karaf</developerConnection>
+		<tag>0.0.1</tag>
+	</scm>
+
+	<developers>
+	</developers>
+
+	<distributionManagement>
+		<repository>
+			<id>bintray</id>
+			<url>https://api.bintray.com/maven/openzipkin/maven/brave-karaf/;publish=1</url>
+		</repository>
+		<snapshotRepository>
+			<id>jfrog-snapshots</id>
+			<url>http://oss.jfrog.org/artifactory/oss-snapshot-local</url>
+		</snapshotRepository>
+	</distributionManagement>
+
+	<issueManagement>
+		<system>Github</system>
+		<url>https://github.com/openzipkin/brave-karaf/issues</url>
+	</issueManagement>
+
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>io.zipkin.java</groupId>
+				<artifactId>zipkin</artifactId>
+				<version>${zipkin.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>io.zipkin.reporter</groupId>
+				<artifactId>zipkin-reporter</artifactId>
+				<version>${zipkin.reporter.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>io.zipkin.reporter</groupId>
+				<artifactId>zipkin-sender-urlconnection</artifactId>
+				<version>${zipkin.reporter.version}</version>
+			</dependency>
+			
+			<dependency>
+				<groupId>io.zipkin.brave</groupId>
+				<artifactId>brave-core</artifactId>
+				<version>${brave.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>junit</groupId>
+				<artifactId>junit</artifactId>
+				<version>4.12</version>
+			</dependency>
+			<dependency>
+				<groupId>org.awaitility</groupId>
+				<artifactId>awaitility</artifactId>
+				<version>2.0.0</version>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+
+	<dependencies>
+		<dependency>
+			<groupId>io.zipkin.java</groupId>
+			<artifactId>zipkin</artifactId>
+		</dependency>
+
+		<!-- don't worry. auto-* are source retention, not runtime -->
+		<dependency>
+			<groupId>com.google.auto.value</groupId>
+			<artifactId>auto-value</artifactId>
+			<version>1.3</version>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.assertj</groupId>
+			<artifactId>assertj-core</artifactId>
+			<version>3.5.2</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>io.zipkin.java</groupId>
+			<artifactId>zipkin</artifactId>
+			<version>${zipkin.version}</version>
+			<type>test-jar</type>
+		</dependency>
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-classic</artifactId>
+			<version>1.1.7</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<!-- mvn -N io.takari:maven:wrapper -Dmaven=3.3.9 -->
+				<plugin>
+					<groupId>io.takari</groupId>
+					<artifactId>maven</artifactId>
+					<version>0.3.3</version>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+
+		<plugins>
+			<plugin>
+				<inherited>true</inherited>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.5.1</version>
+				<configuration>
+					<source>1.6</source>
+					<target>1.6</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>animal-sniffer-maven-plugin</artifactId>
+				<version>1.15</version>
+				<configuration>
+					<signature>
+						<groupId>org.codehaus.mojo.signature</groupId>
+						<artifactId>${main.signature.artifact}</artifactId>
+						<version>1.0</version>
+					</signature>
+				</configuration>
+				<executions>
+					<execution>
+						<goals>
+							<goal>check</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<!-- Ensures checksums are added to published jars -->
+			<plugin>
+				<artifactId>maven-install-plugin</artifactId>
+				<version>2.5.2</version>
+				<configuration>
+					<createChecksum>true</createChecksum>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>com.mycila</groupId>
+				<artifactId>license-maven-plugin</artifactId>
+				<version>${license-maven-plugin.version}</version>
+				<configuration>
+					<header>${main.basedir}/src/etc/header.txt</header>
+					<excludes>
+						<exclude>.travis.yml</exclude>
+						<exclude>.gitignore</exclude>
+						<exclude>.mvn/**</exclude>
+						<exclude>mvnw*</exclude>
+						<exclude>etc/header.txt</exclude>
+						<exclude>**/.idea/**</exclude>
+						<exclude>LICENSE</exclude>
+						<exclude>**/*.md</exclude>
+						<exclude>src/test/resources/**</exclude>
+						<exclude>src/main/resources/**</exclude>
+					</excludes>
+					<strictCheck>true</strictCheck>
+				</configuration>
+				<dependencies>
+					<dependency>
+						<groupId>com.mycila</groupId>
+						<artifactId>license-maven-plugin-git</artifactId>
+						<version>${license-maven-plugin.version}</version>
+					</dependency>
+				</dependencies>
+				<executions>
+					<execution>
+						<goals>
+							<goal>check</goal>
+						</goals>
+						<phase>compile</phase>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<artifactId>maven-release-plugin</artifactId>
+				<version>2.5.3</version>
+				<configuration>
+					<useReleaseProfile>false</useReleaseProfile>
+					<releaseProfiles>release</releaseProfiles>
+					<autoVersionSubmodules>true</autoVersionSubmodules>
+					<tagNameFormat>@{project.version}</tagNameFormat>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>io.zipkin.centralsync-maven-plugin</groupId>
+				<artifactId>centralsync-maven-plugin</artifactId>
+				<version>0.1.0</version>
+				<configuration>
+					<packageName>zipkin-aws</packageName>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<profiles>
+		<profile>
+			<id>release</id>
+			<build>
+				<plugins>
+					<!-- Creates source jar -->
+					<plugin>
+						<artifactId>maven-source-plugin</artifactId>
+						<version>3.0.1</version>
+						<executions>
+							<execution>
+								<id>attach-sources</id>
+								<goals>
+									<goal>jar</goal>
+								</goals>
+							</execution>
+						</executions>
+					</plugin>
+
+					<plugin>
+						<artifactId>maven-javadoc-plugin</artifactId>
+						<version>2.10.4</version>
+						<configuration>
+							<failOnError>false</failOnError>
+							<excludePackageNames>zipkin.aws.internal,zipkin.aws.internal.*
+							</excludePackageNames>
+							<!-- hush pedantic warnings: we don't put param and return on everything! -->
+							<additionalparam>-Xdoclint:none</additionalparam>
+						</configuration>
+						<executions>
+							<execution>
+								<id>attach-javadocs</id>
+								<goals>
+									<goal>jar</goal>
+								</goals>
+								<phase>package</phase>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
 </project>