diff --git a/CommunityToolkit.Aspire.sln b/CommunityToolkit.Aspire.sln
index 17a621765..ef2cda004 100644
--- a/CommunityToolkit.Aspire.sln
+++ b/CommunityToolkit.Aspire.sln
@@ -3,25 +3,25 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.12.35101.237
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{899F0713-7FC6-4750-BAFC-AC650B35B453}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{414151D4-7009-4E78-A5C6-D99EBD1E67D1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Aspire.Hosting.Java", "src\CommunityToolkit.Aspire.Hosting.Java\CommunityToolkit.Aspire.Hosting.Java.csproj", "{DAA67050-44B3-458F-9818-5877D606866A}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Aspire.AppHost.Tests", "test\CommunityToolkit.Aspire.AppHost.Tests\CommunityToolkit.Aspire.AppHost.Tests.csproj", "{E2905A71-E25D-46FC-A128-D6A366D4D751}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{8519CC01-1370-47C8-AD94-B0F326B1563F}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Aspire.Hosting.Java.Tests", "test\CommunityToolkit.Aspire.Hosting.Java.Tests\CommunityToolkit.Aspire.Hosting.Java.Tests.csproj", "{2EA0F32C-F21B-4D29-8018-7E96363E4548}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "java", "java", "{F120E99A-FB2A-4C3B-B588-9B7ED1CD4E8A}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{8519CC01-1370-47C8-AD94-B0F326B1563F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Aspire.Java.WebApp", "examples\java\CommunityToolkit.Aspire.Java.WebApp\CommunityToolkit.Aspire.Java.WebApp.csproj", "{3D767C8C-7E04-4264-B4E9-13600650D2B1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Aspire.Java.ApiApp", "examples\java\CommunityToolkit.Aspire.Java.ApiApp\CommunityToolkit.Aspire.Java.ApiApp.csproj", "{34602A2D-24B2-47C0-9678-F1F7CD6C8C6D}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "java", "java", "{F120E99A-FB2A-4C3B-B588-9B7ED1CD4E8A}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Aspire.Java.AppHost", "examples\java\CommunityToolkit.Aspire.Java.AppHost\CommunityToolkit.Aspire.Java.AppHost.csproj", "{55AC8E7E-DA0A-489D-8059-4E7190C9EEBF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Aspire.Java.ServiceDefaults", "examples\java\CommunityToolkit.Aspire.Java.ServiceDefaults\CommunityToolkit.Aspire.Java.ServiceDefaults.csproj", "{BBAFA814-1026-4A39-AA28-BCAE3951A224}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Aspire.Java.WebApp", "examples\java\CommunityToolkit.Aspire.Java.WebApp\CommunityToolkit.Aspire.Java.WebApp.csproj", "{3D767C8C-7E04-4264-B4E9-13600650D2B1}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{899F0713-7FC6-4750-BAFC-AC650B35B453}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Aspire.AppHost.Tests", "test\CommunityToolkit.Aspire.AppHost.Tests\CommunityToolkit.Aspire.AppHost.Tests.csproj", "{E2905A71-E25D-46FC-A128-D6A366D4D751}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -33,14 +33,10 @@ Global
{DAA67050-44B3-458F-9818-5877D606866A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DAA67050-44B3-458F-9818-5877D606866A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DAA67050-44B3-458F-9818-5877D606866A}.Release|Any CPU.Build.0 = Release|Any CPU
- {E2905A71-E25D-46FC-A128-D6A366D4D751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E2905A71-E25D-46FC-A128-D6A366D4D751}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E2905A71-E25D-46FC-A128-D6A366D4D751}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E2905A71-E25D-46FC-A128-D6A366D4D751}.Release|Any CPU.Build.0 = Release|Any CPU
- {2EA0F32C-F21B-4D29-8018-7E96363E4548}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2EA0F32C-F21B-4D29-8018-7E96363E4548}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2EA0F32C-F21B-4D29-8018-7E96363E4548}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2EA0F32C-F21B-4D29-8018-7E96363E4548}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3D767C8C-7E04-4264-B4E9-13600650D2B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3D767C8C-7E04-4264-B4E9-13600650D2B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3D767C8C-7E04-4264-B4E9-13600650D2B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3D767C8C-7E04-4264-B4E9-13600650D2B1}.Release|Any CPU.Build.0 = Release|Any CPU
{34602A2D-24B2-47C0-9678-F1F7CD6C8C6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{34602A2D-24B2-47C0-9678-F1F7CD6C8C6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{34602A2D-24B2-47C0-9678-F1F7CD6C8C6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -53,22 +49,22 @@ Global
{BBAFA814-1026-4A39-AA28-BCAE3951A224}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BBAFA814-1026-4A39-AA28-BCAE3951A224}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BBAFA814-1026-4A39-AA28-BCAE3951A224}.Release|Any CPU.Build.0 = Release|Any CPU
- {3D767C8C-7E04-4264-B4E9-13600650D2B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3D767C8C-7E04-4264-B4E9-13600650D2B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3D767C8C-7E04-4264-B4E9-13600650D2B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3D767C8C-7E04-4264-B4E9-13600650D2B1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E2905A71-E25D-46FC-A128-D6A366D4D751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E2905A71-E25D-46FC-A128-D6A366D4D751}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E2905A71-E25D-46FC-A128-D6A366D4D751}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E2905A71-E25D-46FC-A128-D6A366D4D751}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {E2905A71-E25D-46FC-A128-D6A366D4D751} = {899F0713-7FC6-4750-BAFC-AC650B35B453}
- {2EA0F32C-F21B-4D29-8018-7E96363E4548} = {899F0713-7FC6-4750-BAFC-AC650B35B453}
- {34602A2D-24B2-47C0-9678-F1F7CD6C8C6D} = {F120E99A-FB2A-4C3B-B588-9B7ED1CD4E8A}
+ {DAA67050-44B3-458F-9818-5877D606866A} = {414151D4-7009-4E78-A5C6-D99EBD1E67D1}
{F120E99A-FB2A-4C3B-B588-9B7ED1CD4E8A} = {8519CC01-1370-47C8-AD94-B0F326B1563F}
+ {3D767C8C-7E04-4264-B4E9-13600650D2B1} = {F120E99A-FB2A-4C3B-B588-9B7ED1CD4E8A}
+ {34602A2D-24B2-47C0-9678-F1F7CD6C8C6D} = {F120E99A-FB2A-4C3B-B588-9B7ED1CD4E8A}
{55AC8E7E-DA0A-489D-8059-4E7190C9EEBF} = {F120E99A-FB2A-4C3B-B588-9B7ED1CD4E8A}
{BBAFA814-1026-4A39-AA28-BCAE3951A224} = {F120E99A-FB2A-4C3B-B588-9B7ED1CD4E8A}
- {3D767C8C-7E04-4264-B4E9-13600650D2B1} = {F120E99A-FB2A-4C3B-B588-9B7ED1CD4E8A}
+ {E2905A71-E25D-46FC-A128-D6A366D4D751} = {899F0713-7FC6-4750-BAFC-AC650B35B453}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {08B1D4B8-D2C5-4A64-BB8B-E1A2B29525F0}
diff --git a/agents/opentelemetry-javaagent.jar b/agents/opentelemetry-javaagent.jar
new file mode 100644
index 000000000..357d5fecd
Binary files /dev/null and b/agents/opentelemetry-javaagent.jar differ
diff --git a/examples/java/CommunityToolkit.Aspire.Java.AppHost/CommunityToolkit.Aspire.Java.AppHost.csproj b/examples/java/CommunityToolkit.Aspire.Java.AppHost/CommunityToolkit.Aspire.Java.AppHost.csproj
index b32f8447f..66d7b97ae 100644
--- a/examples/java/CommunityToolkit.Aspire.Java.AppHost/CommunityToolkit.Aspire.Java.AppHost.csproj
+++ b/examples/java/CommunityToolkit.Aspire.Java.AppHost/CommunityToolkit.Aspire.Java.AppHost.csproj
@@ -8,6 +8,8 @@
CommunityToolkit.Aspire.Java.AppHost
CommunityToolkit.Aspire.Java.AppHost
+
+ $(MSBuildProjectDirectory)/../CommunityToolkit.Aspire.Java.Spring.Maven
@@ -20,4 +22,9 @@
+
+
+
+
+
diff --git a/examples/java/CommunityToolkit.Aspire.Java.AppHost/Program.cs b/examples/java/CommunityToolkit.Aspire.Java.AppHost/Program.cs
index 9b43869f0..274a86772 100644
--- a/examples/java/CommunityToolkit.Aspire.Java.AppHost/Program.cs
+++ b/examples/java/CommunityToolkit.Aspire.Java.AppHost/Program.cs
@@ -14,12 +14,12 @@
if (builder.ExecutionContext.IsPublishMode == false)
{
executableapp = builder.AddSpringApp("executableapp",
- workingDirectory: "../CommunityToolkit.Aspire.Spring.Maven",
+ workingDirectory: "../CommunityToolkit.Aspire.Java.Spring.Maven",
new JavaAppExecutableResourceOptions()
{
ApplicationName = "target/spring-maven-0.0.1-SNAPSHOT.jar",
Port = 8085,
- OtelAgentPath = "../../agents",
+ OtelAgentPath = "../../../agents",
});
}
diff --git a/examples/java/CommunityToolkit.Aspire.Java.WebApp/Components/App.razor b/examples/java/CommunityToolkit.Aspire.Java.WebApp/Components/App.razor
index f006c88f6..b24a25d56 100644
--- a/examples/java/CommunityToolkit.Aspire.Java.WebApp/Components/App.razor
+++ b/examples/java/CommunityToolkit.Aspire.Java.WebApp/Components/App.razor
@@ -7,7 +7,7 @@
-
+
diff --git a/examples/java/CommunityToolkit.Aspire.Java.WebApp/Components/Layout/NavMenu.razor b/examples/java/CommunityToolkit.Aspire.Java.WebApp/Components/Layout/NavMenu.razor
index ecc086189..dd12d56a6 100644
--- a/examples/java/CommunityToolkit.Aspire.Java.WebApp/Components/Layout/NavMenu.razor
+++ b/examples/java/CommunityToolkit.Aspire.Java.WebApp/Components/Layout/NavMenu.razor
@@ -1,6 +1,6 @@
diff --git a/global.json b/global.json
new file mode 100644
index 000000000..a8ab760dd
--- /dev/null
+++ b/global.json
@@ -0,0 +1,5 @@
+{
+ "sdk": {
+ "allowPrerelease": false
+ }
+}
\ No newline at end of file
diff --git a/src/CommunityToolkit.Aspire.Hosting.Java/README.md b/src/CommunityToolkit.Aspire.Hosting.Java/README.md
index f22e10f95..f71bbc5e9 100644
--- a/src/CommunityToolkit.Aspire.Hosting.Java/README.md
+++ b/src/CommunityToolkit.Aspire.Hosting.Java/README.md
@@ -1,26 +1,34 @@
-# Aspire Contribs
+# CommunityToolkit.Aspire.Hosting.Java
-This is a collection of community contributed libraries for .NET Aspire
+This enables either containerised or executable Java app to be integrated with .NET Aspire.
## Prerequisites
-- [JDK 17+](https://learn.microsoft.com/java/openjdk/download)
-- [Springboot CLI](https://docs.spring.io/spring-boot/installing.html#getting-started.installing.cli)
-- [Apache Maven](https://maven.apache.org)
-- [Docker](https://docs.docker.com/get-docker/)
+- [JDK 17+](https://learn.microsoft.com/java/openjdk/download)
+- [Springboot CLI](https://docs.spring.io/spring-boot/installing.html#getting-started.installing.cli)
+- [Apache Maven](https://maven.apache.org)
+- [Docker](https://docs.docker.com/get-docker/)
-## For Java App
+## Quickstart
-1. First of all, you should have [OpenTelemetry Agent for Java](https://opentelemetry.io/docs/zero-code/java/agent/). You can download it to your local machine by running the following commands:
+1. Run .NET Aspire dashboard:
```bash
- # Bash
+ dotnet watch run --project ./examples/java/CommunityToolkit.Aspire.Java.AppHost
+ ```
+
+## More detailed steps (Optional)
+
+1. Download [OpenTelemetry Agent for Java](https://opentelemetry.io/docs/zero-code/java/agent/) to your local machine by running the following commands:
+
+ ```bash
+ # bash/zsh
mkdir -p ./agents
wget -P ./agents \
https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
# PowerShell
- New-item -type Directory -Path ./downloaded -Force
+ New-item -type Directory -Path ./agents -Force
Invoke-WebRequest `
-OutFile "./agents/opentelemetry-javaagent.jar" `
-Uri "https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar"
@@ -29,7 +37,7 @@ This is a collection of community contributed libraries for .NET Aspire
1. Build the Spring app with Maven:
```bash
- pushd ./src/CommunityToolkit.Aspire.Spring.Maven
+ pushd ./examples/java/CommunityToolkit.Aspire.Java.Spring.Maven
./mvnw clean package
@@ -39,27 +47,23 @@ This is a collection of community contributed libraries for .NET Aspire
1. Build a container image for the Spring app:
```bash
- pushd ./src/CommunityToolkit.Aspire.Spring.Maven
+ pushd ./examples/java/CommunityToolkit.Aspire.Java.Spring.Maven
docker build . -t aspire-spring-maven-sample:latest
popd
```
-1. Push the container image to [Docker Hub](https://hub.docker.com) under your organisation. This sample uses `aliencube`:
+1. Push the container image to [Docker Hub](https://hub.docker.com) under your organisation, `contoso` for example:
```bash
- docker tag aspire-spring-maven-sample:latest aliencube/aspire-spring-maven-sample:latest
- docker push aliencube/aspire-spring-maven-sample:latest
+ docker tag aspire-spring-maven-sample:latest contoso/aspire-spring-maven-sample:latest
+ docker push contoso/aspire-spring-maven-sample:latest
```
> **NOTE**: You need to log in to Docker Hub before pushing the image.
-1. Run .NET Aspire dashboard:
-
- ```bash
- dotnet watch run --project ./src/CommunityToolkit.Aspire.AppHost
- ```
+## Dashboard
1. Check the dashboard that both containerised app and executable app are up and running.
@@ -71,6 +75,12 @@ This is a collection of community contributed libraries for .NET Aspire
## Deployment to Azure
+1. Change the directory to `examples/java`.
+
+ ```bash
+ cd ./examples/java
+ ```
+
1. Get the Azure environment name ready:
```bash
diff --git a/test/CommunityToolkit.Aspire.Hosting.Java.Tests/CommunityToolkit.Aspire.Hosting.Java.Tests.csproj b/test/CommunityToolkit.Aspire.Hosting.Java.Tests/CommunityToolkit.Aspire.Hosting.Java.Tests.csproj
deleted file mode 100644
index 86aec735f..000000000
--- a/test/CommunityToolkit.Aspire.Hosting.Java.Tests/CommunityToolkit.Aspire.Hosting.Java.Tests.csproj
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
- true
-
- false
-
- true
-
- CommunityToolkit.Aspire.Hosting.Java.Tests
- CommunityToolkit.Aspire.Hosting.Java.Tests
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/CommunityToolkit.Aspire.Hosting.Java.Tests/JavaAppHostingExtensionTests.cs b/test/CommunityToolkit.Aspire.Hosting.Java.Tests/JavaAppHostingExtensionTests.cs
deleted file mode 100644
index 99a356b39..000000000
--- a/test/CommunityToolkit.Aspire.Hosting.Java.Tests/JavaAppHostingExtensionTests.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System.Net;
-
-using FluentAssertions;
-
-namespace CommunityToolkit.Aspire.Hosting.Java.Tests;
-
-public class JavaAppHostingExtensionTests
-{
- [Fact]
- public async Task Given_Container_Resource_When_Invoked_Then_Root_Returns_OK()
- {
- // Arrange
- var appHost = await DistributedApplicationTestingBuilder.CreateAsync();
- await using var app = await appHost.BuildAsync();
- await app.StartAsync();
-
- Thread.Sleep(5000);
-
- // Act
- var httpClient = app.CreateHttpClient("containerapp");
- var response = await httpClient.GetAsync("/");
-
- // Assert
- response.StatusCode.Should().Be(HttpStatusCode.OK);
- }
-
- [Fact]
- public async Task Given_Executable_Resource_When_Invoked_Then_Root_Returns_OK()
- {
- // Arrange
- var appHost = await DistributedApplicationTestingBuilder.CreateAsync();
- await using var app = await appHost.BuildAsync();
- await app.StartAsync();
-
- Thread.Sleep(10000);
-
- // Act
- var httpClient = app.CreateHttpClient("executableapp");
- var response = await httpClient.GetAsync("/");
-
- // Assert
- response.StatusCode.Should().Be(HttpStatusCode.OK);
- }
-}
diff --git a/test/CommunityToolkit.Aspire.Hosting.Java.Tests/Program.cs b/test/CommunityToolkit.Aspire.Hosting.Java.Tests/Program.cs
deleted file mode 100644
index 2a577b31e..000000000
--- a/test/CommunityToolkit.Aspire.Hosting.Java.Tests/Program.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using CommunityToolkit.Aspire.Hosting.Java;
-
-var builder = DistributedApplication.CreateBuilder(args);
-
-builder.AddSpringApp("containerapp",
- new JavaAppContainerResourceOptions()
- {
- ContainerImageName = "aspire-contribs/spring-maven-sample",
- OtelAgentPath = "/agents"
- });
-
-builder.AddSpringApp("executableapp",
- workingDirectory: "../../examples/java/CommunityToolkit.Aspire.Java.Spring.Maven",
- new JavaAppExecutableResourceOptions()
- {
- ApplicationName = "target/spring-maven-0.0.1-SNAPSHOT.jar",
- Port = 8085,
- OtelAgentPath = "../../agents",
- });
-
-builder.Build().Run();