From e8ffd1535177b3aa00c4f726d92d957aa29cab31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sven=20G=C3=B6thel?= Date: Sat, 6 Sep 2025 17:47:21 +0200 Subject: [PATCH] wagon-ssh-external: Use absolute-dir in case localFile.getParentFile() returns null If using `mvn gpg:sign-and-deploy-file` as shown below, localFile becomes e.g. `gluegen-2.6.0-sources.jar`, i.e. relative and w/o parent-directory. Hence localFile.getParentFile() returns null and the previous code fails to transport the file. ``` mvn -e gpg:sign-and-deploy-file \ -DpomFile=pom.xml" \ -Dfile=gluegen.jar" \ -Dfiles=gluegen-2.6.0-sources.jar,gluegen-2.6.0-javadoc.jar" \ -Dclassifiers=sources,javadoc" \ -Dtypes=jar,jar" \ -Durl=scpexe://jordan/srv/www/jordan/deployment/maven/ \ -DrepositoryId=jordan-mirror ``` This patch uses the localFile.getAbsoluteFile() in case localFile.getParentFile() returns null and renders wagon-ssh-external functional w/ above `mvn gpg:sign-and-deploy-file` Tested via `mvn install -Dmaven.test.skip` and `mvn install` and JogAmp's maven install scripts at . --- .../providers/ssh/external/ScpExternalWagon.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/ssh/external/ScpExternalWagon.java b/wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/ssh/external/ScpExternalWagon.java index 0ab0cd29..a6234a70 100644 --- a/wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/ssh/external/ScpExternalWagon.java +++ b/wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/ssh/external/ScpExternalWagon.java @@ -229,7 +229,18 @@ private void executeScpCommand(Resource resource, File localFile, boolean put) } Commandline cl = createBaseCommandLine(putty, scpExecutable, privateKey); - cl.setWorkingDirectory(localFile.getParentFile().getAbsolutePath()); + File parentFile = localFile.getParentFile(); + if (null == parentFile) { + try { + File abs = localFile.getAbsoluteFile(); + parentFile = abs.getParentFile(); + } catch (SecurityException e) { + fireTransferError(resource, e, put ? TransferEvent.REQUEST_PUT : TransferEvent.REQUEST_GET); + + throw new TransferFailedException("Error accessing absolute path of " + localFile, e); + } + } + cl.setWorkingDirectory(parentFile.getAbsolutePath()); int port = repository.getPort() == WagonConstants.UNKNOWN_PORT ? ScpHelper.DEFAULT_SSH_PORT : repository.getPort();