Проблема распространения Maven FTP - PullRequest
1 голос
/ 21 октября 2009

Maven Release: выполнить не удается распространить через 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 я понял, что мне нужна beta-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

У меня не было wagon-ftp.jar или commons-net.jar в $ M2_HOME / lib, но сейчас есть. Я получаю ту же ошибку.

$ 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- sources .jar, но установлен с -Dversion = 1.0-beta-2 (без источников) ... поэтому я скопировал исходный JAR в двоичное имя файла jar: -).

Спасибо всем за помощь в этом!

Ответы [ 2 ]

2 голосов
/ 22 октября 2009

Настройка выглядит хорошо. И да, пассивный режим используется по умолчанию (см. WAGON-143 ). Тем не менее, согласно трассировке (java.lang.AbstractMethodError выбрасывается, когда что-то пытается вызвать абстрактный метод), очевидно, что ваш универсал не совместим с вашей версией maven. Вагон безумия ...

Это, конечно, не лучшее место, но это на самом деле задокументировано в Руководстве по использованию расширений (обратите особое внимание на " Примечание " внизу):

Расширения используются для включения 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.

РЕДАКТИРОВАТЬ: О новой ошибке, FAQ по плагину для развертывания maven описывает нечто очень похожее:

Если вы используете цель deploy: deploy-file и сталкиваетесь с этой ошибкой:

"Ошибка развертывания артефакта: неподдерживаемый протокол: 'ftp': не удается найти универсал, который поддерживает запрашиваемый протокол: ftp"

Затем вам необходимо указать подходящего поставщика вагонов в вашем %M2_HOME%/lib. В этом случае необходим провайдер ftp, поэтому мы должны поместить jar wagon-ftp в каталог lib вашей установки Maven 2.

Если описание ошибки примерно такое:

"Ошибка развертывания артефакта: неподдерживаемый протокол: 'ftp': не удается найти универсал, который поддерживает запрашиваемый протокол: ftp org / apache / commons / net / ftp / FTP"

Затем вам нужно поместить банку с сетью общего пользования в %M2_HOME%/lib.

Я не понимаю, почему это нужно делать, но попробуйте поместить wagon-ftp-1.0-beta-2.jar в %M2_HOME%/lib.

EDIT2: Я снова прочитал вопрос, и похоже, что вы установили jar-файл «sources», который, конечно, не содержит требуемых классов для среды выполнения. Прежде чем следовать приведенному выше совету, попробуйте поместить в свой репозиторий wagon-ftp-1.0-beta-2.jar (а не wagon-ftp-1.0-beta-2-sources.jar ).

2 голосов
/ 22 октября 2009

Вы определили wagon-ftp как расширение в вашем pom ?

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

Если да, то проблема в неправильных версиях maven и wagon-ftp. Здесь - одна статья об этой проблеме.

В maven-user-list я обнаружил, что вам нужно использовать 1.0-beta-2 ftp wagon с 2.0.9. 1.0-бета-3 будет работать с 2.0.10 и Wagon 1.0-бета-5 будет работать только как расширение в Maven 2.1.0-M1 и выше .

...