2009-10-21 53 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