maven - 在 Maven Ant 任务期间“无法登录 FTP 服务器”——但可以使用相同的凭据登录 GUI FTP 客户端
问题描述
我有一个 Maven 构建,一旦打包完成,我会尝试使用特定配置文件将一些文件从打包发送到 FTP 服务器。问题是,每当我尝试这个时,我总是会遇到 Maven 失败:
Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.3:run
(deploy) on project xxx.xxx.xxx.xxx: An Ant BuildException has occured:
Could not login to FTP server
这很令人困惑,因为我能够使用 FileZilla 和用于 Maven Ant 构建任务的相同凭据登录 FTP 服务器,而不会出现任何问题(在同一台机器上)。我还可以通过 FileZilla 双向传输文件,也没有任何问题。
在我最近进行例行服务器重启之前,这曾经可以正常工作。我的 FTP 服务器是安装了标准 Ubuntu 操作系统和 VSFTPD 的 DigitalOcean droplet。
我pom.xml
的如下:
...
<profile>
<id>publish-product</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>deploy</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<ftp
server="${env.DEPLOY_FTP_SERVER}"
remotedir="${env.DEPLOY_FTP_DIR}"
userid="${env.DEPLOY_FTP_USERNAME}"
password="${env.DEPLOY_FTP_PASSWORD}"
umask="002"
passive="yes">
<fileset dir="target/repository">
<include name="**/*" />
</fileset>
</ftp>
</tasks>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-commons-net</artifactId>
<version>1.10.9</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<profile>
...
Maven 构建使用以下命令执行:
mvn -U -DskipTests clean package -Ppublish-product
有谁知道阻止 Ant FTP 任务运行可能会发生什么?
Ant 任务的完整输出如下:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.3:run (deploy) on project xxxx.xxxx.xxxx.xxxx: An Ant BuildException has occured: Could not login to FTP server -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.3:run (deploy) on project xxxx.xxxx.xxxx.xxxx: An Ant BuildException has occured: Could not login to FTP server
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: An Ant BuildException has occured: Could not login to FTP server
at org.apache.maven.plugin.antrun.AbstractAntMojo.executeTasks (AbstractAntMojo.java:131)
at org.apache.maven.plugin.antrun.AntRunMojo.execute (AntRunMojo.java:98)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: org.apache.tools.ant.BuildException: Could not login to FTP server
at org.apache.tools.ant.taskdefs.optional.net.FTP.execute (FTP.java:2528)
at org.apache.tools.ant.UnknownElement.execute (UnknownElement.java:288)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.apache.tools.ant.dispatch.DispatchUtils.execute (DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform (Task.java:348)
at org.apache.tools.ant.Target.execute (Target.java:357)
at org.apache.maven.plugin.antrun.AbstractAntMojo.executeTasks (AbstractAntMojo.java:118)
at org.apache.maven.plugin.antrun.AntRunMojo.execute (AntRunMojo.java:98)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
我的 FileZilla 会话的详细日志如下:
Status: Resolving address of myftpserver.xxxx.xxxx
Status: Connecting to 218.86.381.231:21...
Status: Connection established, waiting for welcome message...
Status: Insecure server, it does not support FTP over TLS.
Status: Server does not support non-ASCII characters.
Status: Logged in
Status: Retrieving directory listing...
Status: Directory listing of "/" successful
Status: Connection closed by server
Status: Resolving address of myftpserver.xxxx.xxxx
Status: Connecting to 218.86.381.231:21...
Status: Connection established, waiting for welcome message...
Status: Insecure server, it does not support FTP over TLS.
Status: Server does not support non-ASCII characters.
Status: Logged in
Status: Retrieving directory listing of "/"...
Status: Directory listing of "/" successful
Status: Resolving address of myftpserver.xxxx.xxxx
Status: Connecting to 218.86.381.231:21...
Status: Connection established, waiting for welcome message...
Status: Insecure server, it does not support FTP over TLS.
Status: Server does not support non-ASCII characters.
Status: Logged in
Status: Starting upload of D:\logo.pdf
Status: File transfer successful, transferred 1,260 bytes in 1 second
Status: Retrieving directory listing of "/"...
Status: Calculating timezone offset of server...
Status: Timezone offset of server is 0 seconds.
Status: Directory listing of "/" successful
Status: Deleting "/logo.pdf"
Status: Disconnected from server
Status: Connection closed by server
Status: Resolving address of myftpserver.xxxx.xxxx
Status: Connecting to 218.86.381.231:21...
Status: Connection established, waiting for welcome message...
Status: Insecure server, it does not support FTP over TLS.
Status: Server does not support non-ASCII characters.
Status: Logged in
Status: Retrieving directory listing of "/"...
Status: Directory listing of "/" successful
Status: Connection closed by server
Status: Resolving address of myftpserver.xxxx.xxxx
Status: Connecting to 218.86.381.231:21...
Status: Connection established, waiting for welcome message...
Status: Insecure server, it does not support FTP over TLS.
Status: Server does not support non-ASCII characters.
Status: Logged in
Status: Starting upload of D:\logo.pdf
Status: File transfer successful, transferred 1,260 bytes in 1 second
Status: Retrieving directory listing of "/"...
Status: Directory listing of "/" successful
解决方案
“无法登录 FTP 服务器”错误表明您的凭据错误。FTPClient.login
失败时发出错误。
我看到您已通过使用 GUI FTP 客户端进行身份验证来验证您拥有正确的凭据。因此,凭证中有一些特殊字符可能需要转义或特殊处理。
推荐阅读
- postgresql - PostgreSQL BDR 与复制槽有关的问题
- node.js - `http://localhost` 上的安全 Cookie
- react-native - React-native this.props 在回调函数中为空
- java - Apache Ignite 不会以 6 节点集群启动 - 无法解析节点拓扑
- python - 如何可视化多个向量之间的关系(距离度量)?
- ruby-on-rails - Rails 添加验证以根据属性检查模型的实例数
- java - Android工作室,在java中每次点击都会改变按钮文本
- ios - 如何使用 SpriteKit 在 Xcode 13 中以编程方式设置根视图控制器?
- git - 创建新分支时将日期和时间附加到分支名称
- flutter - 可以“保持中心点”的列。我能做些什么?