我想为自己创建的工件拥有自己的 Maven 存储库,但是在尝试将 Maven 3 工件部署到自定义服务器时遇到问题。为了更好地解释这一点,我将提供一些信息:
- 我正在使用 Maven 3
- 我正在使用 Eclipse 开普勒
- 我正在使用詹金斯
- 远程服务器正在运行 Ubuntu Server 11.04
- Jenkins 在 Ubuntu 服务器上运行
- 我的本地机器正在运行 Windows XP
我的第一次尝试是用我的机器。我在 Eclipse 中运行 Maven 进行部署,一切正常。我将以下内容添加到我的项目 pom
<build>
...
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-beta-6</version>
</extension>
</extensions>
...
</build>
...
<distributionManagement>
<repository>
<id>my server id</id>
<name>my repository name</name>
<url>scpexe://my server//path/to/my/repository</url>
</repository>
</distributionManagement>
在我的 settings.xml 我添加
<servers>
<server>
<id>my server id</id>
<username>server username</username>
<password>server password</password>
<configuration>
<sshExecutable>plink</sshExecutable>
<scpExecutable>pscp</scpExecutable>
</configuration>
</server>
</servers>
所以在我的本地机器上它可以工作,但我需要使用 Jenkins 来完成这项工作。我修改了 Jenkins settings.xml,因为它在 Linux 上运行,所以不需要 sshExecutable。Jenkins settings.xml 看起来像
<servers>
<server>
<id>my server id</id>
<username>server username</username>
<password>server password</password>
</server>
</servers>
然后我修改 pom.xml 只执行 scp 而不是 scpexe
<distributionManagement>
<repository>
<id>my server id</id>
<name>my repository name</name>
<url>scp://my server//path/to/my/repository</url>
</repository>
</distributionManagement>
但是根据这个页面https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes maven 3 不支持 scp。我以任何方式运行它,我从 Jenkins 日志中收到以下错误消息
mavenExecutionResult exceptions not empty
message : Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project myproject: Failed to deploy artifacts/metadata: No connector available to access repository my_repository (scp://my server//path/to/my/repository) of type default using the available factories WagonRepositoryConnectorFactory
cause : Failed to deploy artifacts/metadata: No connector available to access repository my_repository (scp://my server//path/to/my/repository) of type default using the available factories WagonRepositoryConnectorFactory
Stack trace :
如果我使用 scpexe 而不是 scp 我收到另一条错误消息
mavenExecutionResult exceptions not empty
message : Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project pruebanueva: Failed to deploy artifacts: Could not transfer artifact {$groupId}:{$artifactId}:{$package}:{$version} from/to my_repository (scpexe://my server//path/to/my/repository): Error executing command for transfer
cause : Failed to deploy artifacts: Could not transfer artifact {$groupId}:{$artifactId}:{$package}:{$version} from/to my_repository (scpexe://my server//path/to/my/repository): Error executing command for transfer
Stack trace :
我可以进行部署的唯一方法是分两步进行
- 配置 Jenkins 以实现安装目标
- 从命令行运行以下命令
mvn deploy:deploy-file -DgroupId=$groupId -DartifactId=$artifactId -Dversion=$version -Dpackaging=jar -Dfile=path/to/file.jar -Durl=scp://my server//path/to/我的/存储库 -DrepositoryId=我的存储库 ID
我尝试了很多事情,包括将该命令写入 Jenkins 目标,但每次我在 Jenkins 中使用 scp 命令时,构建都会失败。
任何有关如何解决此问题的想法将不胜感激。