2017-08-03 190 views
0

我希望能夠使用scp在nexus存儲庫上部署maven項目的快照。 這裏是我的pom.xml的有趣部分當前配置:Maven使用scp拋出部署快照NoSuchElementException

<distributionManagement> 
    <snapshotRepository> 
     <id>gforge.inria.fr-snapshot</id> 
     <name>inria-snapshots</name> 
     <url>scp://scm.gforge.inria.fr/home/groups/spoon/htdocs/repositories/snapshots</url> 
    </snapshotRepository> 
    <site> 
     <id>gforge.inria.fr-site</id> 
     <name>inria</name> 
     <url>scp://scm.gforge.inria.fr/home/groups/spoon/htdocs/mvnsites/spoon-core</url> 
    </site> 
    </distributionManagement> 
    [...] 
<extensions> 
     <extension> 
     <groupId>org.apache.maven.wagon</groupId> 
     <artifactId>wagon-ssh</artifactId> 
     </extension> 
    </extensions> 
    </build> 

整個pom.xml的可用there

我們正在使用的密鑰對來驗證我們的倉庫,所以我進入~/.m2/settings.xml如下:

<server> 
    <id>gforge.inria.fr-snapshot</id> 
    <username>XXXX</username> 
    <privateKey>/path/to/the/private/key</privateKey> 
</server> 

當我啓動mvn clean deploy我得到以下錯誤:

[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.2:deploy (injected-nexus-deploy) on project spoon-core: Failed to deploy artifacts/metadata: Cannot access scp://scm.gforge.inria.fr/home/groups/spoon/htdocs/repositories/snapshots with type default using the available connector factories: BasicRepositoryConnectorFactory: Cannot access scp://scm.gforge.inria.fr/home/groups/spoon/htdocs/repositories/snapshots using the registered transporter factories: WagonTransporterFactory: java.util.NoSuchElementException 
[ERROR] role: org.apache.maven.wagon.Wagon 
[ERROR] roleHint: scp 

使用調試選項執行向我顯示以下堆棧跟蹤:

java.util.NoSuchElementException 
     role: org.apache.maven.wagon.Wagon 
    roleHint: scp 
org.codehaus.plexus.component.repository.exception.ComponentLookupException: java.util.NoSuchElementException 
     role: org.apache.maven.wagon.Wagon 
    roleHint: scp 
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:267) 
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:255) 
    at org.eclipse.aether.internal.transport.wagon.PlexusWagonProvider.lookup(PlexusWagonProvider.java:58) 
    at org.eclipse.aether.transport.wagon.WagonTransporter.lookupWagon(WagonTransporter.java:271) 
    at org.eclipse.aether.transport.wagon.WagonTransporter.<init>(WagonTransporter.java:115) 
    at org.eclipse.aether.transport.wagon.WagonTransporterFactory.newInstance(WagonTransporterFactory.java:127) 
    at org.eclipse.aether.internal.impl.DefaultTransporterProvider.newTransporter(DefaultTransporterProvider.java:110) 
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector.<init>(BasicRepositoryConnector.java:115) 
    at org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory.newInstance(BasicRepositoryConnectorFactory.java:180) 
    at org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider.newRepositoryConnector(DefaultRepositoryConnectorProvider.java:113) 
    at org.eclipse.aether.internal.impl.DefaultDeployer.deploy(DefaultDeployer.java:265) 

有關信息,我正在使用Maven 3.3.9和Java 8(我使用openjdk和oracle JDK進行了測試,結果相同)。

我知道我的pom.xml安裝程序應該可以工作:它在虛擬機上運行了數月。可悲的是,我沒有設置該虛擬機,最近我們丟失了它,沒有任何備份。我沒有關於這臺機器上的java或maven版本的任何信息。

這個虛擬機是通過jenkins Job定期做mvn deploy的,你可以看看這個工作的不同日誌:https://ci.inria.fr/sos/job/Spoon-Snapshot-Deployer/。在7月28日之前它運行良好,顯示我錯誤的日誌是自8月2日以來。

回答

1

繼您的pom後,錯誤來自wagon-ssh擴展名,由nexus-staging-maven-plugin使用。

由於您不知道您的崩潰虛擬機使用的版本是什麼,您是否嘗試更新與nexus-staging-maven-plugin關聯的wagon-ssh版本?例如,通過使用:

<plugin> 
    <groupId>org.sonatype.plugins</groupId> 
    <artifactId>nexus-staging-maven-plugin</artifactId> 
    <version>1.6.2</version> 
    <extensions>true</extensions> 
    <configuration> 
     <serverId>ossrh</serverId> 
     <nexusUrl>https://oss.sonatype.org/</nexusUrl> 
     <autoReleaseAfterClose>true</autoReleaseAfterClose> 
    </configuration> 
    <dependencies> 
     <dependency> 
     <groupId>org.apache.maven.wagon</groupId> 
     <artifactId>wagon-ssh</artifactId> 
     <version>2.12</version> 
     </dependency> 
    </dependencies> 
    </plugin>