Skip to content

Commit

Permalink
Don't fail on main class inference if custom entrypoint (#3296)
Browse files Browse the repository at this point in the history
  • Loading branch information
chanseokoh authored Jun 10, 2021
1 parent f91451a commit 6b06b3c
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -632,9 +632,19 @@ static List<String> computeEntrypoint(
}

String classpathString = String.join(":", classpath);
String mainClass =
MainClassResolver.resolveMainClass(
rawConfiguration.getMainClass().orElse(null), projectProperties);
String mainClass;
try {
mainClass =
MainClassResolver.resolveMainClass(
rawConfiguration.getMainClass().orElse(null), projectProperties);
} catch (MainClassInferenceException ex) {
if (entrypointDefined) {
// We will use the user-given entrypoint, so don't fail.
mainClass = "could-not-infer-a-main-class";
} else {
throw ex;
}
}
addJvmArgFilesLayer(
rawConfiguration, projectProperties, jibContainerBuilder, classpathString, mainClass);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,54 @@ public void testClasspathArgumentFile()
assertThat(jvmArgFiles)
.comparingElementsUsing(EXTRACTION_PATH_OF)
.containsExactly("/app/jib-classpath-file", "/app/jib-main-class-file");

String classpath =
new String(
Files.readAllBytes(appCacheDirectory.resolve("jib-classpath-file")),
StandardCharsets.UTF_8);
assertThat(classpath)
.isEqualTo("/foo:/app/resources:/app/classes:/app/libs/foo-1.jar:/app/libs/bar-2.jar");
String mainClass =
new String(
Files.readAllBytes(appCacheDirectory.resolve("jib-main-class-file")),
StandardCharsets.UTF_8);
assertThat(mainClass).isEqualTo("java.lang.Object");
}

@Test
public void testClasspathArgumentFile_mainClassInferenceFailureWithCustomEntrypoint()
throws NumberFormatException, InvalidImageReferenceException, MainClassInferenceException,
InvalidAppRootException, IOException, InvalidWorkingDirectoryException,
InvalidPlatformException, InvalidContainerVolumeException,
IncompatibleBaseImageJavaVersionException, InvalidContainerizingModeException,
InvalidFilesModificationTimeException, InvalidCreationTimeException {
when(rawConfiguration.getMainClass()).thenReturn(Optional.of("invalid main class"));
when(rawConfiguration.getEntrypoint()).thenReturn(Optional.of(Arrays.asList("bash")));

ContainerBuildPlan buildPlan = processCommonConfiguration();

assertThat(buildPlan.getEntrypoint()).containsExactly("bash");

List<FileEntry> jvmArgFiles = getLayerEntries(buildPlan, "jvm arg files");
assertThat(jvmArgFiles)
.comparingElementsUsing(SOURCE_FILE_OF)
.containsExactly(
appCacheDirectory.resolve("jib-classpath-file"),
appCacheDirectory.resolve("jib-main-class-file"));
assertThat(jvmArgFiles)
.comparingElementsUsing(EXTRACTION_PATH_OF)
.containsExactly("/app/jib-classpath-file", "/app/jib-main-class-file");

String classpath =
new String(
Files.readAllBytes(appCacheDirectory.resolve("jib-classpath-file")),
StandardCharsets.UTF_8);
assertThat(classpath).isEqualTo("/app/resources:/app/classes:/app/libs/*");
String mainClass =
new String(
Files.readAllBytes(appCacheDirectory.resolve("jib-main-class-file")),
StandardCharsets.UTF_8);
assertThat(mainClass).isEqualTo("could-not-infer-a-main-class");
}

@Test
Expand Down

0 comments on commit 6b06b3c

Please sign in to comment.