diff --git a/.azure-pipelines/client.test.yml b/.azure-pipelines/client.test.yml
new file mode 100644
index 0000000000000..24b2a548f7329
--- /dev/null
+++ b/.azure-pipelines/client.test.yml
@@ -0,0 +1,23 @@
+parameters:
+ name: ''
+ vmImage: ''
+
+jobs:
+- job: ${{ format('Test_{0}', parameters.name) }}
+
+ pool:
+ vmImage: ${{ parameters.vmImage }}
+
+ steps:
+ - task: Maven@3
+ displayName: 'Run tests'
+ inputs:
+ mavenPomFile: 'pom.client.build.xml'
+ options: '--batch-mode' #hides dependencies download progress from CI output
+ mavenOptions: '-Xmx3072m -Dorg.slf4j.simpleLogger.defaultLogLevel=error -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn'
+ javaHomeOption: 'JDKVersion'
+ jdkVersionOption: '1.8'
+ jdkArchitectureOption: 'x64'
+ publishJUnitResults: true
+ testResultsFiles: '**/TEST-*.xml'
+ goals: 'test'
diff --git a/.azure-pipelines/client.yml b/.azure-pipelines/client.yml
new file mode 100644
index 0000000000000..c59bead812dc1
--- /dev/null
+++ b/.azure-pipelines/client.yml
@@ -0,0 +1,51 @@
+trigger:
+- master
+
+jobs:
+- template: client.test.yml
+ parameters:
+ name: Linux
+ vmImage: 'ubuntu-16.04'
+
+- template: client.test.yml
+ parameters:
+ name: macOS
+ vmImage: 'macOS-10.13'
+
+- template: client.test.yml
+ parameters:
+ name: Windows
+ vmImage: 'vs2017-win2016'
+
+- job: 'Publish'
+
+ dependsOn:
+ - 'Test_Linux'
+ - 'Test_macOS'
+ - 'Test_Windows'
+
+ pool:
+ vmImage: 'ubuntu-16.04'
+
+ steps:
+ - task: Maven@3
+ inputs:
+ mavenPomFile: 'pom.client.build.xml'
+ options: '--batch-mode' #hides dependencies download progress from CI output
+ mavenOptions: '-Xmx3072m -Dmaven.test.skip=true -Dorg.slf4j.simpleLogger.defaultLogLevel=error -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn'
+ javaHomeOption: 'JDKVersion'
+ jdkVersionOption: '1.8'
+ jdkArchitectureOption: 'x64'
+ publishJUnitResults: false
+ goals: 'package'
+ displayName: 'Package'
+
+ - task: CopyFiles@2
+ inputs:
+ contents: '**/*.jar'
+ targetFolder: $(Build.ArtifactStagingDirectory)
+ flattenFolders: true
+ displayName: 'Copy'
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish'
diff --git a/pom.client.build.xml b/pom.client.build.xml
new file mode 100644
index 0000000000000..d0a1dc8c2df84
--- /dev/null
+++ b/pom.client.build.xml
@@ -0,0 +1,22 @@
+
+ 4.0.0
+
+ com.microsoft.azure
+ azure-sdk-parent
+ 1.0-SNAPSHOT
+ ./pom.client.xml
+
+
+ azure-sdk-parent-build
+ ${parent.version}
+ pom
+
+ Microsoft Azure SDK Build
+ This package bundles all the SDKs in a multi-module for build/CI purposes.
+ https://github.com/Azure/azure-sdk-for-java
+
+
+ ./template/client
+
+
diff --git a/pom.client.xml b/pom.client.xml
new file mode 100644
index 0000000000000..60222bd17f4f1
--- /dev/null
+++ b/pom.client.xml
@@ -0,0 +1,41 @@
+
+ 4.0.0
+ com.microsoft.azure
+ azure-sdk-parent
+ pom
+ 1.0-SNAPSHOT
+
+ Microsoft Azure SDK Parent
+ This package contains the parent module of Microsoft Azure SDK.
+ https://github.com/Azure/azure-sdk-for-java
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.1
+
+
+ 1.8
+ true
+ true
+ -Xlint:unchecked
+
+
+
+
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
diff --git a/template/client/README.md b/template/client/README.md
new file mode 100644
index 0000000000000..97562a72e63e7
--- /dev/null
+++ b/template/client/README.md
@@ -0,0 +1,3 @@
+# Azure Template
+
+This project provides a starter template for a Java client package.
diff --git a/template/client/pom.xml b/template/client/pom.xml
new file mode 100644
index 0000000000000..68c4478902dba
--- /dev/null
+++ b/template/client/pom.xml
@@ -0,0 +1,25 @@
+
+ 4.0.0
+
+
+ com.microsoft.azure
+ azure-sdk-parent
+ 1.0-SNAPSHOT
+ ../../pom.client.xml
+
+
+ azure-sdk-template
+ jar
+
+ Microsoft Azure SDK for Template
+ This package contains Microsoft Azure SDK for Template.
+
+
+
+ junit
+ junit
+ test
+
+
+
diff --git a/template/client/src/main/java/com/microsoft/azure/template/Hello.java b/template/client/src/main/java/com/microsoft/azure/template/Hello.java
new file mode 100644
index 0000000000000..a8d495a8abd35
--- /dev/null
+++ b/template/client/src/main/java/com/microsoft/azure/template/Hello.java
@@ -0,0 +1,12 @@
+/**
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for
+ * license information.
+ */
+package com.microsoft.azure.template;
+
+public class Hello {
+ public String getMessage() {
+ return "hello";
+ }
+}
diff --git a/template/client/src/test/java/com/microsoft/azure/template/HelloTest.java b/template/client/src/test/java/com/microsoft/azure/template/HelloTest.java
new file mode 100644
index 0000000000000..0bcf2265d0ae1
--- /dev/null
+++ b/template/client/src/test/java/com/microsoft/azure/template/HelloTest.java
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for
+ * license information.
+ */
+package com.microsoft.azure.template;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class HelloTest {
+ @Test
+ public void testMessage() {
+ assertEquals("hello", (new Hello()).getMessage());
+ }
+}