diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md
index 60a767028ac..cda6510d441 100644
--- a/CHANGELOG_PENDING.md
+++ b/CHANGELOG_PENDING.md
@@ -6,5 +6,6 @@
- Fix generation of untyped maps and array literals
- Implement `InvokeOptionsBuilder` and `InvokeOutputOptionsBuilder`
- Emit invoke options and invoke output options in generated programs
+ - Include explicit dependencies of invokes in their resulting output
### Bug Fixes
diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-options-depends-on/Pulumi.yaml b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-options-depends-on/Pulumi.yaml
new file mode 100644
index 00000000000..d3665e06c43
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-options-depends-on/Pulumi.yaml
@@ -0,0 +1,2 @@
+name: l2-invoke-options-depends-on
+runtime: java
diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-options-depends-on/pom.xml b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-options-depends-on/pom.xml
new file mode 100644
index 00000000000..238da07ebc6
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-options-depends-on/pom.xml
@@ -0,0 +1,99 @@
+
+
+ 4.0.0
+
+ com.pulumi
+ l2-invoke-options-depends-on
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+ 11
+ 11
+ 11
+ generated_program.App
+
+
+
+
+
+ repository-0
+ REPOSITORY
+
+
+
+
+
+ com.pulumi
+ pulumi
+ CORE.VERSION
+
+
+ com.pulumi
+ simple-invoke
+ 10.0.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.2.2
+
+
+
+ true
+ ${mainClass}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.4.2
+
+
+
+ true
+ ${mainClass}
+
+
+
+ jar-with-dependencies
+
+
+
+
+ make-my-jar-with-dependencies
+ package
+
+ single
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.1.0
+
+ ${mainClass}
+ ${mainArgs}
+
+
+
+ org.apache.maven.plugins
+ maven-wrapper-plugin
+ 3.1.1
+
+ 3.8.5
+
+
+
+
+
\ No newline at end of file
diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-options-depends-on/src/main/java/generated_program/App.java b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-options-depends-on/src/main/java/generated_program/App.java
new file mode 100644
index 00000000000..1929183f281
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-options-depends-on/src/main/java/generated_program/App.java
@@ -0,0 +1,43 @@
+package generated_program;
+
+import com.pulumi.Context;
+import com.pulumi.Pulumi;
+import com.pulumi.core.Output;
+import com.pulumi.simpleinvoke.Provider;
+import com.pulumi.simpleinvoke.StringResource;
+import com.pulumi.simpleinvoke.StringResourceArgs;
+import com.pulumi.simpleinvoke.SimpleinvokeFunctions;
+import com.pulumi.simpleinvoke.inputs.MyInvokeArgs;
+import com.pulumi.deployment.InvokeOutputOptions;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+public class App {
+ public static void main(String[] args) {
+ Pulumi.run(App::stack);
+ }
+
+ public static void stack(Context ctx) {
+ var explicitProvider = new Provider("explicitProvider");
+
+ var first = new StringResource("first", StringResourceArgs.builder()
+ .text("first hello")
+ .build());
+
+ final var data = SimpleinvokeFunctions.myInvoke(MyInvokeArgs.builder()
+ .value("hello")
+ .build(), (new InvokeOutputOptions.Builder())
+ .dependsOn(first)
+ .build());
+
+ var second = new StringResource("second", StringResourceArgs.builder()
+ .text(data.applyValue(_data -> _data.result()))
+ .build());
+
+ ctx.export("hello", data.applyValue(_data -> _data.result()));
+ }
+}
diff --git a/sdk/java/pulumi/src/main/java/com/pulumi/deployment/internal/DeploymentImpl.java b/sdk/java/pulumi/src/main/java/com/pulumi/deployment/internal/DeploymentImpl.java
index 95f31aa09f5..df89ec39693 100644
--- a/sdk/java/pulumi/src/main/java/com/pulumi/deployment/internal/DeploymentImpl.java
+++ b/sdk/java/pulumi/src/main/java/com/pulumi/deployment/internal/DeploymentImpl.java
@@ -568,7 +568,7 @@ public Output invoke(String token, TypeShape targetType, InvokeArgs ar
} else {
return packageRefFuture
.thenCompose(packageRefString -> this.invokeRawAsync(token, serializedArgs, options, packageRefString))
- .thenApply(result -> parseInvokeResponse(token, targetType, result));
+ .thenApply(result -> parseInvokeResponse(token, targetType, result).withDependencies(options.getDependsOn()));
}
});
}));