diff --git a/.azure-pipelines/client.test.yml b/.azure-pipelines/client.test.yml index 24b2a548f732..81e48bd2eb43 100644 --- a/.azure-pipelines/client.test.yml +++ b/.azure-pipelines/client.test.yml @@ -4,11 +4,16 @@ parameters: jobs: - job: ${{ format('Test_{0}', parameters.name) }} - + dependsOn: + - 'Publish' pool: vmImage: ${{ parameters.vmImage }} steps: + - script: | + mvn jetty:run-forked -Dorg.slf4j.simpleLogger.defaultLogLevel=error -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn --batch-mode -f pom.client.xml + displayName: 'Start Jetty' + - task: Maven@3 displayName: 'Run tests' inputs: diff --git a/.azure-pipelines/client.yml b/.azure-pipelines/client.yml index c59bead812dc..061fe8c1053c 100644 --- a/.azure-pipelines/client.yml +++ b/.azure-pipelines/client.yml @@ -2,32 +2,20 @@ 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 + displayName: 'Checkstyle' + inputs: + mavenPomFile: 'pom.client.build.xml' + goals: 'checkstyle:check' + options: '--batch-mode' + mavenOptions: '-Dorg.slf4j.simpleLogger.defaultLogLevel=error -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn' + publishJUnitResults: false - task: Maven@3 inputs: mavenPomFile: 'pom.client.build.xml' @@ -40,6 +28,14 @@ jobs: goals: 'package' displayName: 'Package' + - task: Maven@3 + displayName: 'Javadoc' + inputs: + mavenPomFile: 'pom.client.build.xml' + goals: 'javadoc:jar' + options: '-DskipTests=true' + publishJUnitResults: false + - task: CopyFiles@2 inputs: contents: '**/*.jar' @@ -49,3 +45,18 @@ jobs: - task: PublishBuildArtifacts@1 displayName: 'Publish' + +- 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' diff --git a/keyvault/data-plane/jetty.xml b/jetty.xml similarity index 97% rename from keyvault/data-plane/jetty.xml rename to jetty.xml index 85e8ee687594..dad29dc54fd4 100644 --- a/keyvault/data-plane/jetty.xml +++ b/jetty.xml @@ -1,38 +1,38 @@ - - - - - - - - - - - - - - - - - 11080 - - - - - - - - - - - - - - - - - 11081 - - - + + + + + + + + + + + + + + + + + 11080 + + + + + + + + + + + + + + + + + 11081 + + + \ No newline at end of file diff --git a/keyvault/data-plane/.travis.yml b/keyvault/data-plane/.travis.yml deleted file mode 100644 index 01a5fe53d22b..000000000000 --- a/keyvault/data-plane/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: java -sudo: required -jdk: -- oraclejdk8 -env: - global: - -AZURE_TEST_MODE=Playback - -'keyvault.vaulturi'=https://tifchen-keyvault-fancy.vault.azure.net - -'keyvault.vaulturi.alt'=https://tifchen-keyvault-fancier.vault.azure.net -script: -- LOG_PARAMS='-Dorg.slf4j.simpleLogger.defaultLogLevel=error -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn --batch-mode' ; -- mvn jetty:run & echo "==> Starting a Jetty server on the background ==" ; -- mvn install -DskipTests=true $LOG_PARAMS || travis_terminate 1 ; - -- echo '==> Starting mvn test ===' ; -- mvn test -Dsurefire.rerunFailingTestsCount=3 $LOG_PARAMS -Dparallel=classes -DthreadCount=2 -DforkCount=1C || travis_terminate 1 ; - - - diff --git a/keyvault/data-plane/azure-keyvault/pom.xml b/keyvault/data-plane/azure-keyvault/pom.xml index b6da877337b1..5d6a418f514d 100644 --- a/keyvault/data-plane/azure-keyvault/pom.xml +++ b/keyvault/data-plane/azure-keyvault/pom.xml @@ -207,14 +207,6 @@ the MIT License. See License.txt in the project root for license information. -- - - org.eclipse.jetty - jetty-maven-plugin - 9.2.22.v20170606 - - ../jetty.xml,../jetty-http.xml - - org.apache.maven.plugins maven-jar-plugin diff --git a/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/AsyncOperationsTest.java b/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/AsyncOperationsTest.java index 11c8cf4bf8c8..3918faf1fba8 100644 --- a/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/AsyncOperationsTest.java +++ b/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/AsyncOperationsTest.java @@ -14,6 +14,7 @@ import java.util.Random; import java.util.concurrent.ExecutionException; +import com.microsoft.azure.management.resources.fluentcore.utils.SdkContext; import org.junit.Assert; import org.junit.Test; @@ -83,9 +84,7 @@ public void keyAsyncForAsyncOperationsTest() throws Exception { keyVaultClient.deleteKeyAsync(keyBundle.keyIdentifier().vault(), keyBundle.keyIdentifier().name(), null).get(); pollOnKeyDeletion(keyBundle.keyIdentifier().vault(), keyBundle.keyIdentifier().name()); keyVaultClient.purgeDeletedKey(keyBundle.keyIdentifier().vault(), keyBundle.keyIdentifier().name()); - if (isRecordMode()) { - Thread.sleep(20000); - } + SdkContext.sleep(20000); KeyBundle restoreResult = keyVaultClient.restoreKeyAsync(vault, backupResult.value(), null).get(); Assert.assertNotNull(restoreResult); @@ -124,9 +123,7 @@ public void keyAsyncForAsyncOperationsTest() throws Exception { Assert.assertNotNull(keyBundle); pollOnKeyDeletion(keyBundle.keyIdentifier().vault(), keyBundle.keyIdentifier().name()); keyVaultClient.purgeDeletedKey(keyBundle.keyIdentifier().vault(), keyBundle.keyIdentifier().name()); - if (isRecordMode()) { - Thread.sleep(20000); - } + SdkContext.sleep(20000); // Get the unavailable key to throw exception -> it gets stuck try { @@ -183,7 +180,7 @@ public void secretAsyncForAsyncOperationsTest() throws Exception { } pollOnSecretDeletion(vault, secretname); keyVaultClient.purgeDeletedSecretAsync(vault, secretname, null).get(); - Thread.sleep(20000); + SdkContext.sleep(20000); } @Test @@ -259,7 +256,7 @@ public void certificateAsyncForAsyncOperationsTest() throws Exception { } keyVaultClient.purgeDeletedCertificate(vault, certificateName); - Thread.sleep(20000); + SdkContext.sleep(20000); } @Test diff --git a/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/CertificateOperationsTest.java b/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/CertificateOperationsTest.java index 797d32b54955..885ff4bbbaf8 100644 --- a/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/CertificateOperationsTest.java +++ b/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/CertificateOperationsTest.java @@ -39,6 +39,7 @@ import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; +import com.microsoft.azure.management.resources.fluentcore.utils.SdkContext; import org.apache.commons.codec.binary.Base64; import org.joda.time.DateTime; import org.junit.Assert; @@ -195,7 +196,7 @@ public void createSelfSignedCertificatePkcs12ForCertificateOperationsTest() thro } keyVaultClient.purgeDeletedCertificate(getVaultUri(), certificateName); - Thread.sleep(20000); + SdkContext.sleep(20000); } /** @@ -253,7 +254,7 @@ public void createSelfSignedCertificatePemForCertificateOperationsTest() throws pollOnCertificateDeletion(getVaultUri(), certificateName); keyVaultClient.purgeDeletedCertificate(getVaultUri(), certificateName); - Thread.sleep(20000); + SdkContext.sleep(20000); } /** @@ -356,7 +357,7 @@ public void createCertificatePkcs12ForCertificateOperationsTest() throws Excepti pollOnCertificateDeletion(getVaultUri(), certificateName); keyVaultClient.purgeDeletedCertificate(getVaultUri(), certificateName); - Thread.sleep(20000); + SdkContext.sleep(20000); } /** @@ -443,7 +444,7 @@ public void createCertificatePemForCertificateOperationsTest() throws Exception pollOnCertificateDeletion(getVaultUri(), certificateName); keyVaultClient.purgeDeletedCertificate(getVaultUri(), certificateName); - Thread.sleep(20000); + SdkContext.sleep(20000); } /** @@ -497,7 +498,7 @@ public void createCsrForCertificateOperationsTest() throws Exception { } keyVaultClient.purgeDeletedCertificate(getVaultUri(), certificateName); - Thread.sleep(20000); + SdkContext.sleep(20000); } /** @@ -545,7 +546,7 @@ public void certificateAsyncRequestCancellationForCertificateOperationsTest() th keyVaultClient.deleteCertificate(getVaultUri(), certificateName); pollOnCertificateDeletion(getVaultUri(), certificateName); keyVaultClient.purgeDeletedCertificate(getVaultUri(), certificateName); - Thread.sleep(20000); + SdkContext.sleep(20000); } /** @@ -606,7 +607,7 @@ public void importCertificatePkcs12ForCertificateOperationsTest() throws Excepti } keyVaultClient.purgeDeletedCertificate(getVaultUri(), certificateName); - Thread.sleep(10000); + SdkContext.sleep(10000); } /** @@ -658,7 +659,7 @@ public void certificateUpdateForCertificateOperationsTest() throws Exception { pollOnCertificateDeletion(getVaultUri(), certificateName); keyVaultClient.purgeDeletedCertificate(getVaultUri(), certificateName); - Thread.sleep(10000); + SdkContext.sleep(10000); } /** @@ -694,9 +695,7 @@ public void listCertificatesForCertificateOperationsTest() throws Exception { ++failureCount; if (e.body().error().code().equals("Throttled")) { System.out.println("Waiting to avoid throttling"); - if (isRecordMode()) { - Thread.sleep(failureCount * 1500); - } + SdkContext.sleep(failureCount * 1500); continue; } throw e; @@ -723,7 +722,7 @@ public void listCertificatesForCertificateOperationsTest() throws Exception { keyVaultClient.deleteCertificate(getVaultUri(), toDeleteCertificateName); pollOnCertificateDeletion(getVaultUri(), toDeleteCertificateName); keyVaultClient.purgeDeletedCertificate(getVaultUri(), toDeleteCertificateName); - Thread.sleep(10000); + SdkContext.sleep(10000); } } @@ -760,9 +759,7 @@ public void listCertificateVersionsForCertificateOperationsTest() throws Excepti ++failureCount; if (e.body().error().code().equals("Throttled")) { System.out.println("Waiting to avoid throttling"); - if (isRecordMode()) { - Thread.sleep(failureCount * 1500); - } + SdkContext.sleep(failureCount * 1500); continue; } throw e; @@ -932,9 +929,7 @@ private static CertificateBundle pollOnCertificateOperation(CertificateOperation CertificateOperation pendingCertificateOperation = keyVaultClient .getCertificateOperation(getVaultUri(), certificateName); if (pendingCertificateOperation.status().equalsIgnoreCase(STATUS_IN_PROGRESS)) { - if (isRecordMode()) { - Thread.sleep(10000); - } + SdkContext.sleep(10000); pendingPollCount += 1; continue; } diff --git a/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/KeyOperationsTest.java b/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/KeyOperationsTest.java index c7f871936ed4..3b99152d6137 100644 --- a/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/KeyOperationsTest.java +++ b/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/KeyOperationsTest.java @@ -21,6 +21,7 @@ import java.util.Random; import javax.crypto.Cipher; +import com.microsoft.azure.management.resources.fluentcore.utils.SdkContext; import org.joda.time.DateTime; import org.junit.Assert; import org.junit.Assume; @@ -281,9 +282,7 @@ public void crudOperationsForKeyOperationsTest() throws Exception { } keyVaultClient.purgeDeletedKey(getVaultUri(), KEY_NAME); - if (isRecordMode()) { - Thread.sleep(40000); - } + SdkContext.sleep(40000); } @Test @@ -303,9 +302,7 @@ public void backupRestoreForKeyOperationsTest() throws Exception { byte[] keyBackup; { keyBackup = keyVaultClient.backupKey(getVaultUri(), KEY_NAME).value(); - if (isRecordMode()) { - Thread.sleep(20000); - } + SdkContext.sleep(20000); } // Deletes the key. @@ -315,9 +312,7 @@ public void backupRestoreForKeyOperationsTest() throws Exception { } keyVaultClient.purgeDeletedKey(getVaultUri(), KEY_NAME); - if (isRecordMode()) { - Thread.sleep(40000); - } + SdkContext.sleep(40000); // Restores the key. { @@ -343,9 +338,7 @@ public void listKeysForKeyOperationsTest() throws Exception { ++failureCount; if (e.body().error().code().equals("Throttled")) { System.out.println("Waiting to avoid throttling"); - if (isRecordMode()) { - Thread.sleep(failureCount * 1500); - } + SdkContext.sleep(failureCount * 1500); continue; } throw e; @@ -387,9 +380,7 @@ public void listKeysForKeyOperationsTest() throws Exception { KeyIdentifier id = new KeyIdentifier(item.kid()); Assert.assertTrue(toDelete.contains(id.name())); keyVaultClient.purgeDeletedKey(getVaultUri(), id.name()); - if (isRecordMode()) { - Thread.sleep(40000); - } + SdkContext.sleep(40000); } } @@ -410,9 +401,7 @@ public void listKeyVersionsForKeyOperationsTest() throws Exception { ++failureCount; if (e.body().error().code().equals("Throttled")) { System.out.println("Waiting to avoid throttling"); - if (isRecordMode()) { - Thread.sleep(failureCount * 1500); - } + SdkContext.sleep(failureCount * 1500); continue; } throw e; @@ -437,9 +426,7 @@ public void listKeyVersionsForKeyOperationsTest() throws Exception { pollOnKeyDeletion(getVaultUri(), KEY_NAME); keyVaultClient.purgeDeletedKey(getVaultUri(), KEY_NAME); - if (isRecordMode()) { - Thread.sleep(40000); - } + SdkContext.sleep(40000); } @Test diff --git a/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/KeyVaultClientIntegrationTestBase.java b/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/KeyVaultClientIntegrationTestBase.java index 29acb445fe91..8b0a40e74dd6 100644 --- a/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/KeyVaultClientIntegrationTestBase.java +++ b/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/KeyVaultClientIntegrationTestBase.java @@ -81,11 +81,11 @@ public static String getSecondaryVaultUri() { } private static String getLiveVaultUri1() { - return getenvOrDefault("keyvault.vaulturi", "https://javasdktestvault.vault.azure.net"); + return getenvOrDefault("KEYVAULT_VAULTURI", "https://javasdktestvault.vault.azure.net"); } private static String getLiveVaultUri2() { - return getenvOrDefault("keyvault.vaulturi.alt", "https://javasdktestvault2.vault.azure.net"); + return getenvOrDefault("KEYVAULT_VAULTURI_ALT", "https://javasdktestvault2.vault.azure.net"); } private static String getenvOrDefault(String varName, String defValue) { @@ -103,13 +103,13 @@ protected static void compareAttributes(Attributes expectedAttributes, Attribute private static AuthenticationResult getAccessToken(String authorization, String resource) throws Exception { - String clientId = System.getenv("arm.clientid"); + String clientId = System.getenv("ARM_CLIENTID"); if (clientId == null) { - throw new Exception("Please inform arm.clientid in the environment settings."); + throw new Exception("Please provide ARM_CLIENTID in the environment settings."); } - String clientKey = System.getenv("arm.clientkey"); + String clientKey = System.getenv("ARM_CLIENTKEY"); String username = System.getenv("arm.username"); String password = System.getenv("arm.password"); @@ -305,9 +305,7 @@ protected static DeletedCertificateBundle pollOnCertificateDeletion(String vault DeletedCertificateBundle certificateBundle = keyVaultClient.getDeletedCertificate(vaultBaseUrl, certificateName); if (certificateBundle == null) { - if (isRecordMode()) { - Thread.sleep(10000); - } + SdkContext.sleep(10000); pendingPollCount += 1; continue; } else { @@ -322,9 +320,7 @@ protected static DeletedKeyBundle pollOnKeyDeletion(String vaultBaseUrl, String while (pendingPollCount < 21) { DeletedKeyBundle deletedKeyBundle = keyVaultClient.getDeletedKey(vaultBaseUrl, certificateName); if (deletedKeyBundle == null) { - if (isRecordMode()) { - Thread.sleep(10000); - } + SdkContext.sleep(10000); pendingPollCount += 1; continue; } else { @@ -339,9 +335,7 @@ protected static DeletedSecretBundle pollOnSecretDeletion(String vaultBaseUrl, S while (pendingPollCount < 50) { DeletedSecretBundle deletedSecretBundle = keyVaultClient.getDeletedSecret(vaultBaseUrl, secretName); if (deletedSecretBundle == null) { - if (isRecordMode()) { - Thread.sleep(10000); - } + SdkContext.sleep(10000); pendingPollCount += 1; continue; } else { diff --git a/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/SecretOperationsTest.java b/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/SecretOperationsTest.java index 7824d8c3254f..cb9677dbe186 100644 --- a/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/SecretOperationsTest.java +++ b/keyvault/data-plane/azure-keyvault/src/test/java/com/microsoft/azure/keyvault/test/SecretOperationsTest.java @@ -10,6 +10,7 @@ import java.util.HashSet; import java.util.Map; +import com.microsoft.azure.management.resources.fluentcore.utils.SdkContext; import org.joda.time.DateTime; import org.junit.Assert; import org.junit.Test; @@ -93,9 +94,7 @@ public void disabledSecretGetForSecretOperationsTest() throws Exception { keyVaultClient.deleteSecret(getVaultUri(), secretName); // Polling on secret is disabled. - if (isRecordMode()) { - Thread.sleep(40000); - } + SdkContext.sleep(40000); keyVaultClient.purgeDeletedSecret(getVaultUri(), secretName); } @@ -213,9 +212,7 @@ public void listSecretsForSecretOperationsTest() throws Exception { ++failureCount; if (e.body().error().code().equals("Throttled")) { System.out.println("Waiting to avoid throttling"); - if (isRecordMode()) { - Thread.sleep(failureCount * 1500); - } + SdkContext.sleep(failureCount * 1500); continue; } throw e; @@ -246,9 +243,7 @@ public void listSecretsForSecretOperationsTest() throws Exception { DeletedSecretBundle deletedSecretBundle = pollOnSecretDeletion(getVaultUri(), secretName); Assert.assertNotNull(deletedSecretBundle); keyVaultClient.purgeDeletedSecret(getVaultUri(), secretName); - if (isRecordMode()) { - Thread.sleep(20000); - } + SdkContext.sleep(20000); } catch (KeyVaultErrorException e) { // Ignore forbidden exception for certificate secrets that cannot be deleted if (!e.body().error().code().equals("Forbidden")) @@ -273,9 +268,7 @@ public void listSecretVersionsForSecretOperationsTest() throws Exception { ++failureCount; if (e.body().error().code().equals("Throttled")) { System.out.println("Throttled!"); - if (isRecordMode()) { - Thread.sleep(failureCount * 1500); - } + SdkContext.sleep(failureCount * 1500); continue; } throw e; diff --git a/keyvault/data-plane/pom.xml b/keyvault/data-plane/pom.xml index 4a411ac4738f..be8ddf0150ad 100644 --- a/keyvault/data-plane/pom.xml +++ b/keyvault/data-plane/pom.xml @@ -5,7 +5,12 @@ --> 4.0.0 - com.microsoft.azure + + com.microsoft.azure + azure-sdk-parent + 1.0-SNAPSHOT + ../../pom.client.xml + 1.1.2 azure-keyvault-parent pom @@ -288,12 +293,12 @@ -keyvault.vaulturi +KEYVAULT_VAULTURI https://tifchen-keyvault-fancy.vault.azure.net - keyvault.vaulturi.alt + KEYVAULT_VAULTURI_ALT https://tifchen-keyvault-fancier.vault.azure.net @@ -320,8 +325,8 @@ ${testMode} - https://tifchen-keyvault-fancy.vault.azure.net - https://tifchen-keyvault-fancier.vault.azure.net + https://tifchen-keyvault-fancy.vault.azure.net + https://tifchen-keyvault-fancier.vault.azure.net diff --git a/pom.client.build.xml b/pom.client.build.xml index d0a1dc8c2df8..d0f1a308d713 100644 --- a/pom.client.build.xml +++ b/pom.client.build.xml @@ -16,7 +16,25 @@ This package bundles all the SDKs in a multi-module for build/CI purposes. https://github.com/Azure/azure-sdk-for-java + + + + org.eclipse.jetty + jetty-maven-plugin + 9.2.22.v20170606 + + 0 + 11079 + STOP + false + ./jetty.xml + + + + + ./template/client + ./keyvault/data-plane diff --git a/pom.client.xml b/pom.client.xml index 60222bd17f4f..52fc0d84f920 100644 --- a/pom.client.xml +++ b/pom.client.xml @@ -24,6 +24,18 @@ -Xlint:unchecked + + org.eclipse.jetty + jetty-maven-plugin + 9.2.22.v20170606 + + 0 + 11079 + STOP + false + ./jetty.xml + + 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 index a8d495a8abd3..4af4ad00740d 100644 --- a/template/client/src/main/java/com/microsoft/azure/template/Hello.java +++ b/template/client/src/main/java/com/microsoft/azure/template/Hello.java @@ -5,8 +5,15 @@ */ package com.microsoft.azure.template; +/** + * This is a sample class for template app. + */ public class Hello { - public String getMessage() { + /** + * Sample method. + * @return message + */ + public final String getMessage() { return "hello"; } } diff --git a/template/client/src/main/java/com/microsoft/azure/template/package-info.java b/template/client/src/main/java/com/microsoft/azure/template/package-info.java new file mode 100644 index 000000000000..7181dfbebdd6 --- /dev/null +++ b/template/client/src/main/java/com/microsoft/azure/template/package-info.java @@ -0,0 +1,9 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// + +/** + * This package contains classes for the template project. + */ +package com.microsoft.azure.template;