Maven FTP分发问题

时间:2009-10-21 17:57:14

标签: maven-2 ftp

maven发布:执行无法通过FTP分发。

我检查的第一件事是我可以从命令行使用给定的凭据访问目标服务器。我可以使用被动FTP 但不能使用主动FTP (已知的防火墙限制)。我从谷歌搜索中看到的是Maven默认使用被动FTP。那是对的吗?如果没有,我怎么能让它使用被动FTP?

假设Maven使用的是被动FTP,我将不胜感激。

我的配置:

的settings.xml

    <servers>
        <server>
            <id>repo-ftp</id>
            <username>myUserName</username>
            <password>myPassword</password>
        </server>
    </servers>

父POM

  <distributionManagement>
    <repository>
      <id>repo-ftp</id>
      <url>ftp://myServer</url>
    </repository>
    <snapshotRepository>
      <id>repo-ftp</id>
      <url>ftp://myServer</url>
    </snapshotRepository>
  </distributionManagement>

错误消息

[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [ERROR] FATAL ERROR
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] org.apache.maven.wagon.AbstractWagon.openConnection()V
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Trace
[INFO] java.lang.AbstractMethodError: org.apache.maven.wagon.AbstractWagon.openConnection()V
[INFO]  at org.apache.maven.wagon.AbstractWagon.connect(AbstractWagon.java:143)
[INFO]  at org.apache.maven.artifact.manager.DefaultWagonManager.putRemoteFile(DefaultWagonManager.java:235)
[INFO]  at org.apache.maven.artifact.manager.DefaultWagonManager.putArtifact(DefaultWagonManager.java:153)
[INFO]  at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:80)
[INFO]  at org.apache.maven.plugin.deploy.DeployMojo.execute(DeployMojo.java:162)
[INFO]  at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:447)
[INFO]  at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
[INFO]  at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
[INFO]  at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
[INFO]  at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
[INFO]  at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
[INFO]  at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
[INFO]  at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:333)
[INFO]  at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:126)
[INFO]  at org.apache.maven.cli.MavenCli.main(MavenCli.java:282)
[INFO]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[INFO]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[INFO]  at java.lang.reflect.Method.invoke(Method.java:616)
[INFO]  at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
[INFO]  at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
[INFO]  at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
[INFO]  at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Total time: 16 seconds
[INFO] [INFO] Finished at: Wed Oct 21 17:43:11 UTC 2009
[INFO] [INFO] Final Memory: 25M/47M
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Maven execution failed, exit code: '1'

更新

我在父POM中确实有一个扩展节点:

<extension>
  <groupId>org.apache.maven.wagon</groupId>
  <artifactId>wagon-ftp</artifactId>
  <version>1.0-beta-5</version>
</extension>

在审核了 cetnar 的回复后,我意识到我的特定版本的maven需要 beta-2 。当我将扩展节点切换为引用 beta-2 时,maven正确地抱怨没有它可用。所以,我使用

下载并安装
 mvn install:install-file -DgroupId=org.apache.maven.wagon -DartifactId=wagon-ftp -Dversion=1.0-beta-2 -Dpackaging=jar -Dfile=./wagon-ftp-1.0-beta-2-sources.jar

(这是我收到的错误消息的剪切和粘贴,我的本地副本.jar位于适当的位置)。

现在,我明白了:

[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [ERROR] BUILD ERROR
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Error deploying artifact: Unsupported Protocol: 'ftp': Cannot find wagon which supports the requested protocol: ftp
[INFO]
[INFO] Component descriptor cannot be found in the component repository: org.apache.maven.wagon.Wagonftp.

对这个问题的任何建议?

更新2

我在$ M2_HOME / lib中没有wagon-ftp.jar或commons-net.jar但现在就做了。我得到了同样的错误。

$ M2_HOME / lib中

commons-cli.jar -> ../../java/commons-cli.jar
commons-net.jar -> ../../java/commons-net.jar
doxia-sink-api.jar -> ../../java/doxia-sink-api.jar
jsch.jar -> ../../java/jsch.jar
jtidy.jar -> ../../java/jtidy.jar
maven2.jar -> ../../java/maven2.jar
plexus-container-default.jar -> ../../java/plexus-container-default.jar
plexus-interactivity-api.jar -> ../../java/plexus-interactivity-api.jar
plexus-utils.jar -> ../../java/plexus-utils.jar
wagon-file.jar -> ../../java/wagon-file.jar
wagon-ftp-1.0-beta-2.jar -> ../../java/wagon-ftp.jar
wagon-ftp.jar -> ../../java/wagon-ftp.jar
wagon-http-lightweight.jar -> ../../java/wagon-http-lightweight.jar
wagon-http-shared.jar -> ../../java/wagon-http-shared.jar
wagon-provider-api.jar -> ../../java/wagon-provider-api.jar
wagon-ssh-common.jar -> ../../java/wagon-ssh-common.jar
wagon-ssh-external.jar -> ../../java/wagon-ssh-external.jar
wagon-ssh.jar -> ../../java/wagon-ssh.jar
xml-apis.jar -> ../../java/xml-apis.jar

请注意,使用到另一个目录的符号链接部署了所有其他依赖项,因此我继续使用相同的模式。所有文件的访问权限都相同。我尝试提供了wagon-ftp.jar和wagon-ftp-1.0-beta-2.jar符号链接。

我对升级到最新版maven的前景并不感到兴奋(因为担心出现新问题),但这是我最好的选择吗?还有其他想法吗?

有效!的种类。现在我收到了身份验证错误,但这是一个不同的问题。

a-ha时刻提到了-sources,我意识到我已经下载了wagon-ftp-1.0-beta-2- 来源 .jar但安装了-Dversion = 1.0-beta- 2(no -sources)...所以我将源JAR复制到二进制jar文件名: - )。

谢谢大家的帮助!

2 个答案:

答案 0 :(得分:2)

您是否将wagon-ftp定义为extension in your pom

<extensions>
  <extension>
    <groupId>org.apache.maven.wagon</groupId>
    <artifactId>wagon-ftp</artifactId>
    <version>1.0-alpha-3</version>
  </extension>
</extensions>

如果是的话我的问题是错误的版本maven和wagon-ftp。 Here是关于此问题的一篇文章。

在maven-user-list中,我发现你需要使用1.0.9的ftp旅行车的1.0-beta-2。 1.0-beta-3适用于2.0.10 Wagon 1.0-beta-5版本仅作为Maven 2.1.0-M1及以上版本的扩展。

答案 1 :(得分:2)

设置看起来不错。是的,被动模式是默认模式(参见WAGON-143)。也就是说,根据跟踪(当某些东西试图调用抽象方法时抛出java.lang.AbstractMethodError),显然你的旅行车与你的版本的maven不兼容。马车疯狂......

这肯定不是最好的地方,但这实际上记录在Guide to using Extenstions中(特别注意底部的“注意”):

  

扩展程序用于启用Wagon   供应商,用于运输   存储库之间的工件,和   提供生命周期的插件   增强。旅行车供应商

<project>
  ...
  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
         <artifactId>wagon-ftp</artifactId>
         <version>1.0-beta-2</version>
      </extension>
    </extensions>
  </build>
  ...
</project>
     

注意: Wagon 1.0-beta-3 +需要Maven 2.1.0或更高版本。对于Maven 2.0.10   早些时候,使用Wagon 1.0-beta-2。

编辑:关于新错误,maven deploy plugin FAQ描述的内容非常相似:

  

如果您使用deploy:deploy-file目标并遇到此错误:

     

“部署工件时出错:不支持的协议:'ftp':找不到支持所请求协议的旅行车:ftp”

     

然后您需要在%M2_HOME%/lib中放置相应的旅行车提供商。在这种情况下,所需的提供程序是ftp,因此我们必须将wagon-ftp jar放在Maven 2安装的lib目录中。

     

如果错误描述是这样的:

     

“部署工件时出错:不支持的协议:'ftp':找不到支持所请求协议的旅行车:ftp org / apache / commons / net / ftp / FTP”

     

然后你需要将公共网络jar放在%M2_HOME%/lib中。

我不明白为什么人们必须这样做但是试着将wagon-ftp-1.0-beta-2.jar放在%M2_HOME%/lib中。

EDIT2:我再次阅读了这个问题,看起来你确实安装了一个“sources”jar,当然,它不包含运行时所需的类。在遵循上述建议之前,请尝试将wagon-ftp-1.0-beta-2.jar放入您的存储库(而不是wagon-ftp-1.0-beta-2-sources.jar)。