diff --git a/client/src/main/java/org/mvndaemon/mvnd/client/Completion.java b/client/src/main/java/org/mvndaemon/mvnd/client/Completion.java index 590483dc..765e5e46 100644 --- a/client/src/main/java/org/mvndaemon/mvnd/client/Completion.java +++ b/client/src/main/java/org/mvndaemon/mvnd/client/Completion.java @@ -15,15 +15,27 @@ */ package org.mvndaemon.mvnd.client; -import org.mvndaemon.mvnd.common.IoUtils; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; public class Completion { - public static String getCompletion(String shell) { + public static String getCompletion(String shell, DaemonParameters daemonParameters) { if (!"bash".equals(shell)) { throw new IllegalArgumentException("Unexpected --completion value: '" + shell + "'; expected: 'bash'"); } - return IoUtils.readResource(Completion.class.getClassLoader(), "mvnd-bash-completion.bash"); + final Path bashCompletionPath = daemonParameters.mvndHome().resolve("bin/mvnd-bash-completion.bash"); + if (!Files.isRegularFile(bashCompletionPath)) { + throw new IllegalStateException("Bash completion file does not exist: " + bashCompletionPath); + } + try { + return new String(Files.readAllBytes(bashCompletionPath), StandardCharsets.UTF_8); + } catch (IOException e) { + throw new UncheckedIOException("Could not read " + bashCompletionPath, e); + } } } diff --git a/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java b/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java index fb6a0040..33b610e3 100644 --- a/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java +++ b/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java @@ -136,7 +136,7 @@ public class DefaultClient implements Client { final List args = new ArrayList<>(argv); final String completionShell = Environment.COMPLETION.removeCommandLineOption(args); if (completionShell != null) { - output.accept(Message.log(Completion.getCompletion(completionShell))); + output.accept(Message.log(Completion.getCompletion(completionShell, parameters))); return DefaultResult.success(argv); } diff --git a/client/src/test/java/org/mvndaemon/mvnd/client/CompletionGenerator.java b/client/src/test/java/org/mvndaemon/mvnd/client/CompletionGeneratorTest.java similarity index 92% rename from client/src/test/java/org/mvndaemon/mvnd/client/CompletionGenerator.java rename to client/src/test/java/org/mvndaemon/mvnd/client/CompletionGeneratorTest.java index 84920086..03a9036b 100644 --- a/client/src/test/java/org/mvndaemon/mvnd/client/CompletionGenerator.java +++ b/client/src/test/java/org/mvndaemon/mvnd/client/CompletionGeneratorTest.java @@ -29,7 +29,7 @@ import org.mvndaemon.mvnd.common.Environment; import org.mvndaemon.mvnd.common.Environment.OptionOrigin; import org.mvndaemon.mvnd.common.IoUtils; -public class CompletionGenerator { +public class CompletionGeneratorTest { @Test void generate() throws IOException { @@ -70,8 +70,7 @@ public class CompletionGenerator { final Path baseDir = Paths.get(System.getProperty("project.basedir", ".")); final byte[] bytes = template.getBytes(StandardCharsets.UTF_8); - Files.write(baseDir.resolve("src/main/resources/mvnd-bash-completion.bash"), bytes); - Files.write(baseDir.resolve("target/classes/mvnd-bash-completion.bash"), bytes); + Files.write(baseDir.resolve("../dist/src/main/distro/bin/mvnd-bash-completion.bash"), bytes); } diff --git a/client/src/main/resources/mvnd-bash-completion.bash b/dist/src/main/distro/bin/mvnd-bash-completion.bash similarity index 100% rename from client/src/main/resources/mvnd-bash-completion.bash rename to dist/src/main/distro/bin/mvnd-bash-completion.bash