diff --git a/archetypes/archetype-app-quickstart/README.md b/archetypes/archetype-app-quickstart/README.md index 2c95d96ff8b7..5611e454b06b 100755 --- a/archetypes/archetype-app-quickstart/README.md +++ b/archetypes/archetype-app-quickstart/README.md @@ -8,7 +8,7 @@ a dependency of [AWS Java SDK 2.x][aws-java-sdk-v2]. The generated application has the following features: -- Uses [Bill of Materials](BOM) to manage SDK dependencies +- Uses [Bill of Materials][BOM] to manage SDK dependencies - Contains the code to create the SDK client - Out-of-box support of GraalVM Native Image when `nativeImage` is enabled @@ -37,25 +37,27 @@ mvn archetype:generate \ -DhttpClient=apache-client \ -DartifactId=sample-project \ -Dservice=s3 \ - -DinteractiveMode=false + -DinteractiveMode=false \ + -DcredentialProvider=default ``` ### Parameters -Parameter Name | Default Value | Description ----|---|--- -`service` (required) | n/a | Specifies the service client to be used in the application, eg: s3, dynamodb. Only one service should be provided. You can find available services [here][java-sdk-v2-services]. -`groupId`(required) | n/a | Specifies the group ID of the project -`artifactId`(required) | n/a | Specifies the artifact ID of the project -`nativeImage`(required) | n/a | Specifies whether GraalVM Native Image configuration should be included -`httpClient`(required) | n/a | Specifies the http client to be used by the SDK client. Available options are `url-connection-client` (sync), `apache-client` (sync), `netty-nio-client` (async). See [http clients][sdk-http-clients] -`javaSdkVersion` | Same version as the archetype version | Specifies the version of the AWS Java SDK 2.x to be used -`version` | 1.0-SNAPSHOT | Specifies the version of the project -`package` | ${groupId} | Specifies the package name for the classes - +| Parameter Name | Default Value | Description | +|-------------------------|---------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `service` (required) | n/a | Specifies the service client to be used in the application, eg: s3, dynamodb. Only one service should be provided. You can find available services [here][java-sdk-v2-services]. | +| `groupId`(required) | n/a | Specifies the group ID of the project | +| `artifactId`(required) | n/a | Specifies the artifact ID of the project | +| `nativeImage`(required) | n/a | Specifies whether GraalVM Native Image configuration should be included | +| `httpClient`(required) | n/a | Specifies the http client to be used by the SDK client. Available options are `url-connection-client` (sync), `apache-client` (sync), `netty-nio-client` (async). See [http clients][sdk-http-clients] | +| `credentialProvider` | default | Specify the credential-provider to be used by the SDK client and imports relevant dependencies. Available options are `default` which uses the [default credential provider chain](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html), or `identity-center` whi uses [IAM Identity Center](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html) | +| `javaSdkVersion` | Same version as the archetype version | Specifies the version of the AWS Java SDK 2.x to be used | +| `version` | 1.0-SNAPSHOT | Specifies the version of the project | +| `package` | ${groupId} | Specifies the package name for the classes | [aws-java-sdk-v2]: https://github.com/aws/aws-sdk-java-v2 [java-sdk-v2-services]: https://github.com/aws/aws-sdk-java-v2/tree/master/services [sdk-http-clients]: https://github.com/aws/aws-sdk-java-v2/tree/master/http-clients [maven-archetype-usage]: https://maven.apache.org/archetype/maven-archetype-plugin/usage.html [graalvm]: https://www.graalvm.org/docs/getting-started/#native-images +[bom]: https://github.com/aws/aws-sdk-java-v2/blob/master/bom \ No newline at end of file diff --git a/archetypes/archetype-app-quickstart/src/main/resources/META-INF/maven/archetype-metadata.xml b/archetypes/archetype-app-quickstart/src/main/resources/META-INF/maven/archetype-metadata.xml index ced7dbdba15b..aa78ae12e998 100644 --- a/archetypes/archetype-app-quickstart/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/archetypes/archetype-app-quickstart/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -42,5 +42,8 @@ (true|false) + + (default|identity-center) + diff --git a/archetypes/archetype-app-quickstart/src/main/resources/archetype-resources/pom.xml b/archetypes/archetype-app-quickstart/src/main/resources/archetype-resources/pom.xml index 7574db920ff2..68f6c4ab79ee 100644 --- a/archetypes/archetype-app-quickstart/src/main/resources/archetype-resources/pom.xml +++ b/archetypes/archetype-app-quickstart/src/main/resources/archetype-resources/pom.xml @@ -50,6 +50,18 @@ +#if( $credentialProvider == 'identity-center') + + software.amazon.awssdk + sso + + + + software.amazon.awssdk + ssooidc + + +#end software.amazon.awssdk ${httpClient} diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/apachehttpclient/archetype.properties b/archetypes/archetype-app-quickstart/src/test/resources/projects/apachehttpclient/archetype.properties index 0af6b84ce1aa..c28c1ebaa993 100644 --- a/archetypes/archetype-app-quickstart/src/test/resources/projects/apachehttpclient/archetype.properties +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/apachehttpclient/archetype.properties @@ -5,4 +5,5 @@ package=software.amazonaws.test service=s3 httpClient=apache-client javaSdkVersion=2.11.0 -nativeImage=true \ No newline at end of file +nativeImage=true +credentialProvider=default \ No newline at end of file diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/apachehttpclientwithoutnativeimage/archetype.properties b/archetypes/archetype-app-quickstart/src/test/resources/projects/apachehttpclientwithoutnativeimage/archetype.properties index 79cc885e1603..b60e2a1ef5df 100644 --- a/archetypes/archetype-app-quickstart/src/test/resources/projects/apachehttpclientwithoutnativeimage/archetype.properties +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/apachehttpclientwithoutnativeimage/archetype.properties @@ -5,4 +5,5 @@ package=software.amazonaws.test service=s3 httpClient=apache-client javaSdkVersion=2.11.0 -nativeImage=false \ No newline at end of file +nativeImage=false +credentialProvider=default diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/archetype.properties b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/archetype.properties new file mode 100644 index 000000000000..e262cb2b49a0 --- /dev/null +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/archetype.properties @@ -0,0 +1,9 @@ +groupId=software.amazonaws.test +artifactId=test-apache-artifact +version=1.0-SNAPSHOT +package=software.amazonaws.test +service=s3 +httpClient=apache-client +javaSdkVersion=2.11.0 +nativeImage=true +credentialProvider=identity-center diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/goal.txt b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/goal.txt new file mode 100644 index 000000000000..4a1a71d3364c --- /dev/null +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/goal.txt @@ -0,0 +1 @@ +verify \ No newline at end of file diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/README.md b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/README.md new file mode 100644 index 000000000000..d17e94244e89 --- /dev/null +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/README.md @@ -0,0 +1,53 @@ +# App + +This project contains a maven application with [AWS Java SDK 2.x](https://github.com/aws/aws-sdk-java-v2) dependencies. + +## Prerequisites +- Java 1.8+ +- Apache Maven +- GraalVM Native Image (optional) + +## Development + +Below is the structure of the generated project. + +``` +├── src +│   ├── main +│   │   ├── java +│   │   │   └── package +│   │   │   ├── App.java +│   │   │   ├── DependencyFactory.java +│   │   │   └── Handler.java +│   │   └── resources +│   │   └── simplelogger.properties +│   └── test +│   └── java +│   └── package +│   └── HandlerTest.java +``` + +- `App.java`: main entry of the application +- `DependencyFactory.java`: creates the SDK client +- `Handler.java`: you can invoke the api calls using the SDK client here. + +#### Building the project +``` +mvn clean package +``` + +#### Building the native image + +Note that it requires `native-image` installed in your environment + +``` +mvn clean package -P native-image +``` +After it finishes, you can find the generated native image in the `target +` folder. + +You can run the following command to execute it. + +``` +target/test-apache-artifact +``` diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/pom.xml b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/pom.xml new file mode 100644 index 000000000000..97bb28f4d33a --- /dev/null +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/pom.xml @@ -0,0 +1,144 @@ + + + 4.0.0 + + software.amazonaws.test + test-apache-artifact + 1.0-SNAPSHOT + jar + + UTF-8 + 1.8 + 1.8 + 3.2.1 + 3.6.1 + 1.6.0 + 2.11.0 + 1.7.28 + 0.9.6 + 5.8.1 + + + + + + software.amazon.awssdk + bom + ${aws.java.sdk.version} + pom + import + + + + + + + software.amazon.awssdk + s3 + + + software.amazon.awssdk + netty-nio-client + + + software.amazon.awssdk + apache-client + + + + + + software.amazon.awssdk + sso + + + + software.amazon.awssdk + ssooidc + + + + software.amazon.awssdk + apache-client + + + commons-logging + commons-logging + + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + + org.slf4j + slf4j-simple + ${slf4j.version} + + + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + + + org.junit.jupiter + junit-jupiter + ${junit5.version} + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven.compiler.plugin.version} + + + + + + + native-image + + + + org.graalvm.buildtools + native-maven-plugin + ${graalvm.native.maven.plugin.version} + + + build-native + + build + + package + + + + test-apache-artifact + software.amazonaws.test.App + + + --verbose + --no-fallback + --initialize-at-build-time=org.slf4j + + + + + + + + + diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/java/software/amazonaws/test/App.java b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/java/software/amazonaws/test/App.java new file mode 100644 index 000000000000..b587b851e90e --- /dev/null +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/java/software/amazonaws/test/App.java @@ -0,0 +1,16 @@ +package software.amazonaws.test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class App { + private static final Logger logger = LoggerFactory.getLogger(App.class); + + public static void main(String... args) { + logger.info("Application starts"); + + Handler handler = new Handler(); + handler.sendRequest(); + + logger.info("Application ends"); + } +} diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/java/software/amazonaws/test/DependencyFactory.java b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/java/software/amazonaws/test/DependencyFactory.java new file mode 100644 index 000000000000..113edb683c85 --- /dev/null +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/java/software/amazonaws/test/DependencyFactory.java @@ -0,0 +1,22 @@ + +package software.amazonaws.test; + +import software.amazon.awssdk.http.apache.ApacheHttpClient; +import software.amazon.awssdk.services.s3.S3Client; + +/** + * The module containing all dependencies required by the {@link Handler}. + */ +public class DependencyFactory { + + private DependencyFactory() {} + + /** + * @return an instance of S3Client + */ + public static S3Client s3Client() { + return S3Client.builder() + .httpClientBuilder(ApacheHttpClient.builder()) + .build(); + } +} diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/java/software/amazonaws/test/Handler.java b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/java/software/amazonaws/test/Handler.java new file mode 100644 index 000000000000..fd15451b80fd --- /dev/null +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/java/software/amazonaws/test/Handler.java @@ -0,0 +1,16 @@ +package software.amazonaws.test; + +import software.amazon.awssdk.services.s3.S3Client; + + +public class Handler { + private final S3Client s3Client; + + public Handler() { + s3Client = DependencyFactory.s3Client(); + } + + public void sendRequest() { + // TODO: invoking the api calls using s3Client. + } +} diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/resources/simplelogger.properties b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/resources/simplelogger.properties new file mode 100644 index 000000000000..0e6cb98a68ad --- /dev/null +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/main/resources/simplelogger.properties @@ -0,0 +1,24 @@ +# SLF4J's SimpleLogger configuration file +# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err. + +# Default logging detail level for all instances of SimpleLogger. +# Must be one of ("trace", "debug", "info", "warn", or "error"). +# If not specified, defaults to "info". +org.slf4j.simpleLogger.defaultLogLevel=info + +# Log SDK requests +org.slf4j.simpleLogger.log.software.amazon.awssdk.request=debug +org.slf4j.simpleLogger.showDateTime=true +org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z + +# Set to true if you want to output the current thread name. +# Defaults to true. +org.slf4j.simpleLogger.showThreadName=true + +# Set to true if you want the Logger instance name to be included in output messages. +# Defaults to true. +#org.slf4j.simpleLogger.showLogName=true + +# Set to true if you want the last component of the name to be included in output messages. +# Defaults to false. +org.slf4j.simpleLogger.showShortLogName=false \ No newline at end of file diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/test/java/software/amazonaws/test/HandlerTest.java b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/test/java/software/amazonaws/test/HandlerTest.java new file mode 100644 index 000000000000..9837081757f2 --- /dev/null +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/identitycenter/reference/src/test/java/software/amazonaws/test/HandlerTest.java @@ -0,0 +1,7 @@ +package software.amazonaws.test; + +import org.junit.jupiter.api.Test; + +public class HandlerTest { + //TODO add tests here +} diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/nettyclient/archetype.properties b/archetypes/archetype-app-quickstart/src/test/resources/projects/nettyclient/archetype.properties index 16b16eac4f8d..35abf666459e 100644 --- a/archetypes/archetype-app-quickstart/src/test/resources/projects/nettyclient/archetype.properties +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/nettyclient/archetype.properties @@ -5,4 +5,5 @@ package=software.amazonaws.test service=s3 httpClient=netty-nio-client javaSdkVersion=2.11.0 -nativeImage=true \ No newline at end of file +nativeImage=true +credentialProvider=default diff --git a/archetypes/archetype-app-quickstart/src/test/resources/projects/urlhttpclient/archetype.properties b/archetypes/archetype-app-quickstart/src/test/resources/projects/urlhttpclient/archetype.properties index 931670cc7cee..d12eb4adaa8c 100644 --- a/archetypes/archetype-app-quickstart/src/test/resources/projects/urlhttpclient/archetype.properties +++ b/archetypes/archetype-app-quickstart/src/test/resources/projects/urlhttpclient/archetype.properties @@ -5,4 +5,5 @@ package=software.amazonaws.test service=dynamodb httpClient=url-connection-client javaSdkVersion=2.11.0 -nativeImage=true \ No newline at end of file +nativeImage=true +credentialProvider=default