2009-10-21 52 views
1

maven版本:执行未能通过FTP进行分发。Maven FTP分发问题

我检查的第一件事是我可以从命令行使用给定的凭据访问目标服务器。我可以用被动FTP,但不能用活动FTP(已知的防火墙限制)。我可以从Google上看到,默认情况下,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' 

UPDATE

我确实有在父POM的扩展节点:

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

审查从cetnar我认识的答复后,我需要β-2我特定版本的maven。当我将扩展节点切换到引用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

我没有车皮ftp.jar或$ M2_HOME/lib目录公地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(害怕出现新问题)的前景并不兴奋,但这是我最好的选择吗?任何其他想法?

SOLUTION

它的工作!有点。现在我得到一个认证错误,但这是一个不同的问题。

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

谢谢大家对此的帮助!

+0

是的,wagon-ftp默认使用被动模式:http://jira.codehaus.org/browse/WAGON-143 – 2009-10-21 18:38:26

+0

Eric,你真的安装了wagon-ftp-1.0-beta-2-sources.jar吗?这是源代码jar,你需要带编译类的jar。我已经在我的答案中提供了一个链接到这个jar(另一个选项是检查这个版本从颠覆和“mvn安装”它)。 – 2009-10-21 23:40:37

回答

2

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

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

Extensions are used to enable Wagon providers, used for the transport of artifact between repositories, and plug-ins which provide lifecycle enhancements. Wagon providers

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

Note: Wagon 1.0-beta-3+ requires Maven 2.1.0 or above. For Maven 2.0.10 and earlier, use Wagon 1.0-beta-2.

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

If you are using the deploy:deploy-file goal and encounter this error:

"Error deploying artifact: Unsupported Protocol: 'ftp': Cannot find wagon which supports the requested protocol: ftp"

Then you need to place the appropriate wagon provider in your %M2_HOME%/lib . In this case the provider needed is ftp, so we have to place the wagon-ftp jar in the lib directory of your Maven 2 installation.

If the error description is something like this:

"Error deploying artifact: Unsupported Protocol: 'ftp': Cannot find wagon which supports the requested protocol: ftp org/apache/commons/net/ftp/FTP"

Then you need to place the commons-net jar in %M2_HOME%/lib .

我不知道为什么人们就必须这样做,但试图把wagon-ftp-1.0-beta-2.jar in %M2_HOME%/lib

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

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中,我发现需要使用2.0.9的ftp wagon的1.0-beta-2。 1.0-beta-3将与2.0.10一起使用Wagon 1.0-beta-5版本将仅作为Maven 2.1.0-M1和以上的扩展。

+0

AFAIK,1.0-beta-3 +不能与Maven 2.0.x兼容 – 2009-10-21 21:01:14

+0

我的Maven版本是2.0.9。更改为使用beta-2,但得到一个新的错误,我附加到我原来的问题。 – 2009-10-21 23:12:41

+0

@Pascal。我在Maven-user-list的Brett Porter回复中发现了这个声明,我没有检查这个配置。 – cetnar 2009-10-22 06:20:05