diff --git a/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionArchiveDeployer.java b/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionArchiveDeployer.java
index 635a48bc2..88519a9fb 100644
--- a/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionArchiveDeployer.java
+++ b/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionArchiveDeployer.java
@@ -187,6 +187,9 @@ class FunctionArchiveDeployer extends JarLauncher {
private boolean isBootApplicationWithMain() {
try {
+ if (this.getArchive().getManifest() == null) {
+ return false;
+ }
return StringUtils.hasText(this.getArchive().getManifest().getMainAttributes().getValue("Start-Class"));
}
catch (Exception e) {
diff --git a/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionDeployerConfiguration.java b/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionDeployerConfiguration.java
index 7f68381af..4634851c7 100644
--- a/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionDeployerConfiguration.java
+++ b/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionDeployerConfiguration.java
@@ -46,6 +46,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
* and {@link SmartLifecycle#stop()} operations.
*
* @author Oleg Zhurakousky
+ * @author Eric Bottard
*
* @since 3.0
*
diff --git a/spring-cloud-function-deployer/src/test/java/org/springframework/cloud/function/deployer/FunctionDeployerTests.java b/spring-cloud-function-deployer/src/test/java/org/springframework/cloud/function/deployer/FunctionDeployerTests.java
index 2c6c81abd..c7d764498 100644
--- a/spring-cloud-function-deployer/src/test/java/org/springframework/cloud/function/deployer/FunctionDeployerTests.java
+++ b/spring-cloud-function-deployer/src/test/java/org/springframework/cloud/function/deployer/FunctionDeployerTests.java
@@ -86,6 +86,26 @@ public class FunctionDeployerTests {
assertThat(results.get(1)).isEqualTo("STACY");
}
+ @Test
+ public void testWithSimplestJarExploaded() throws Exception {
+ String[] args = new String[] {
+ "--spring.cloud.function.location=target/it/simplestjar/target/classes",
+ "--spring.cloud.function.function-class=function.example.UpperCaseFunction" };
+
+ ApplicationContext context = SpringApplication.run(DeployerApplication.class, args);
+ FunctionCatalog catalog = context.getBean(FunctionCatalog.class);
+ Function function = catalog.lookup("upperCaseFunction");
+
+ assertThat(function.apply("bob")).isEqualTo("BOB");
+ assertThat(function.apply("stacy")).isEqualTo("STACY");
+
+ Function, Flux> functionAsFlux = catalog.lookup("upperCaseFunction");
+
+ List results = functionAsFlux.apply(Flux.just("bob", "stacy")).collectList().block();
+ assertThat(results.get(0)).isEqualTo("BOB");
+ assertThat(results.get(1)).isEqualTo("STACY");
+ }
+
/*
* Target function `class UpperCaseFunction implements Function`
* No Main/Start class present, no Spring configuration