如何将 Maven 构建中的工件部署到 SourceForge 文件发布系统?
-
08-06-2019 - |
题
我正在将 SourceForge 用于一些开源项目,并且希望自动将版本部署到 SourceForge 文件发布系统。我使用 Maven 进行构建,除非您进行一些手动准备工作,否则标准 SFTP 部署机制似乎不起作用。我在其他论坛上看到过一些旧帖子,建议唯一的方法是专门为 SourceForge 编写一个 Wagon。
最近有人有这方面的经验吗?
解决方案
我无法对此进行测试来确认,但我相信无需编写任何插件即可实现。
你可以 使用 SCP 部署到 SourceForge, ,并且 maven-deploy-plugin 可以配置为 使用SCP 所以它应该有效。您还可以部署您的 站点到 SourceForge 通过SCP。
您可以在 settings.xml 中将 SourceForge 服务器配置为使用带有逗号分隔符的“组合”用户名。有了这些凭证:
SourceForge username: foo
SourceForge user password: secret
SourceForge project name: bar
Path: /home/frs/project/P/PR/PROJECT_UNIX_NAME/
- Substitute your project UNIX name data for /P/PR/PROJECT_UNIX_NAME
服务器元素如下所示:
<server>
<id>sourceforge</id>
<username>foo,bar</username>
<password>secret</password>
</server>
POM 中的 distributionManagement 部分如下所示:
<!-- Enabling the use of FTP -->
<distributionManagement>
<repository>
<id>ssh-repository</id>
<url>
scpexe://frs.sourceforge.net:/home/frs/project/P/PR/PROJECT_UNIX_NAME</url>
</repository>
</distributionManagement>
最后声明要使用 ssh-external:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-alpha-5</version>
</extension>
</extensions>
</build>
如果这不起作用,您可以使用上面站点参考中推荐的方法,即使用您的用户名和项目组在 shell.sourceforge.net 上创建一个 shell:
ssh -t <username>,<project name>@shell.sf.net create
然后在 diestributionManagement 部分的站点 URL 中使用 shell.sourceforge.net (而不是 web.sourceforge.net):
<url>scp://shell.sourceforge.net/home/frs/project/P/PR/PROJECT_UNIX_NAME/</url>
其他提示
我已将示例上传到 sourceforge.net,网址为: http://sf-mvn-plugins.sourceforge.net/example-1jar-thinlet/
您可以通过 svn 查看它 - 这样您就可以了解如何使用插件上传和下载以及到 sourceforge.net 文件系统区域和网站。
使用sftp上传的要点:
将类似的代码添加到您的 pom.xml 中
<distributionManagement>
<!-- use the following if you're not using a snapshot version. -->
<repository>
<id>sourceforge-sf-mvn-plugins</id>
<name>FRS Area</name>
<uniqueVersion>false</uniqueVersion>
<url>sftp://web.sourceforge.net/home/frs/project/s/sf/sf-mvn-plugins/m2-repo</url>
</repository>
<site>
<id>sourceforge-sf-mvn-plugins</id>
<name>Web Area</name>
<url>
sftp://web.sourceforge.net/home/groups/s/sf/sf-mvn-plugins/htdocs/${artifactId}
</url>
</site>
</distributionManagement>
在settings.xml中添加类似的代码
<server>
<id>sourceforge-sf-mvn-plugins-svn</id>
<username>tmichel,sf-mvn-plugins</username>
<password>secret</password>
</server>
<server>
<id>sourceforge-sf-mvn-plugins</id>
<username>user,project</username>
<password>secret</password>
</server>
下载的要点是使用 wagon-http-sourceforge maven 插件 - 请参见:sf-mvn-plugins.sourceforge.net/wagon-http-sourceforge/FAQ.html
请将以下代码添加到您的 pom.xml 中
<repositories>
<repository>
<id>sourceforge-svn</id>
<name>SF Maven Plugin SVN Repository</name>
<url>http://sf-mvn-plugins.svn.sourceforge.net/svnroot/sf-mvn-plugins/_m2-repo/trunk</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>sourceforge-frs</id>
<name>SF Maven Plugin Repository</name>
<url>http://sourceforge.net/projects/sf-mvn-plugins/files/m2-repo</url>
</pluginRepository>
</pluginRepositories>
<build>
<extensions>
<extension>
<groupId>net.sf.maven.plugins</groupId>
<artifactId>wagon-http-sourceforge</artifactId>
<version>0.4</version>
</extension>
</extensions>
:
</build>
看来我得自己写这个了。
经过多次尝试后,我终于让它发挥作用了—— sftp 不是 SCP。这应该可以在 unix 机器(或 Mac)上运行——我不确定 Windoze 的 sftp 客户端。我正在使用 mvn 版本 2.2.0,我认为我没有安装任何特殊插件。这会将各种 mvn 包部署到我的项目页面的“文件”部分。
您需要在设置中更改以下内容才能使其正常工作:
- user -- 替换为您的 sourceforce 用户名
- Secret -- 替换为您的密码
- ormlite -- 替换为你的项目名称
- /o/or/ -- 替换为项目名称的第一个字符和前 2 个字符
在我的 $HOME/.m2/settings.xml 文件中,我有 SF 服务器的以下内容:
<server>
<id>sourceforge</id>
<password>secret</password>
<filePermissions>775</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
我没有在settings.xml 文件中指定用户名,因为它需要是用户名、项目,并且我想将多个包部署到SF。然后,在 ormlite 包的 pom.xml 文件中,我有以下内容:
<distributionManagement>
<repository>
<id>sourceforge</id>
<name>SourceForge</name>
<url>sftp://user,ormlite@frs.sourceforge.net:/home/frs/project/o/or/ormlite/releases
</url>
</repository>
<snapshotRepository>
<id>sourceforge</id>
<name>SourceForge</name>
<url>sftp://user,ormlite@frs.sourceforge.net:/home/frs/project/o/or/ormlite/snapshots
</url>
</snapshotRepository>
</distributionManagement>
显然, /releases 和 /snapshots 目录后缀可以根据您的文件层次结构进行更改。
其中 timp = 用户,webmacro = 项目
scp 网址不起作用:
scp://timp,webmacro@shell.sourceforge.net:/home/groups/w/we/webmacro/htdocs/maven2/
sftp 网址有效:
sftp://timp,webmacro@web.sourceforge.net:/home/groups/w/we/webmacro/htdocs/maven2
或者对于项目发布工件:
sftp://timp,webmacro@web.sourceforge.net:/home/frs/project/w/we/webmacro/releases
scp 将适用于 shell.sourceforge.net,但您必须在使用之前创建 shell
ssh -t timp,webmacro@shell.sourceforge.net create
这实际上并没有那么难。首先,我有 mvn site:deploy 按照以下说明进行工作 这个sourceforge网站. 。基本上你可以用以下命令启动sourceforge shell
ssh -t user,project@shell.sourceforge.net create
这将在其末尾创建 shell,并在路径上安装到您的项目的文件夹,例如(取决于您的项目名称):
/home/groups/c/ch/chex4j/
在该 shell 中,我在 sourceforge 服务器上的项目 apache 文件夹“htdocs”下为我的存储库创建了一个文件夹
mkdir /home/groups/c/ch/chex4j/htdocs/maven2
在我的settings.xml中,我将用户名和密码设置为该shell服务器,以便maven可以登录:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd/">
<servers>
<server>
<id>chex4j.sf.net</id>
<username>me,myproject</username>
<password>password</password>
<filePermissions>775</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
</servers>
</settings>
在 pom.xml 中,您只需要您的 distibutionManagement 部分设置,通过您在设置文件中设置密码的 ID 来命名服务器:
<distributionManagement>
<site>
<id>chex4j.sf.net</id>
<url>scp://shell.sourceforge.net/home/groups/c/ch/chex4j/htdocs/
</url>
</site>
<repository>
<id>chex4j.sf.net</id>
<name>SourceForge shell repo</name>
<url>scp://shell.sourceforge.net/home/groups/c/ch/chex4j/htdocs/maven2</url>
</repository>
</distributionManagement>
其中,存储库条目是 mvn deploy 命令的条目,站点条目是 mvn site:deploy 命令的条目。然后我所要做的就是启动 shell 连接以启动服务器端,然后在本地运行:
mvn deploy
它将 jar、pom 和源代码等上传到我的 sourceforge 项目网站上。如果您尝试访问项目网站 sourceforge 上的 /maven2 文件夹,请告诉您默认情况下目录列表处于关闭状态以及如何修复它。要在服务器 shell 上执行此操作,请在 htdocs/maven2 文件夹中创建一个 .htaccess 文件,其中包含以下 apache 选项
Options +Indexes
然后宾果,你有一个 Maven 存储库,如下所示:
http://chex4j.sourceforge.net/maven2/net/sf/chex4j/chex4j-core/1.0.0/
你的 sf.net shell 会在几个小时后关闭,以免占用资源;所以你运行“ssh -t ...创建”当您想要部署站点或构建工件时。
你可以在sourceforge下浏览我所有的maven项目代码来查看我的工作设置:
http://chex4j.svn.sourceforge.net/viewvc/chex4j/branches/1.0.x/chex4j-core/
SCP 网址 做 工作。但不要在服务器名称后使用“:”。MVN 尝试将以下测试读取为整数(端口号)。
您不需要像 simbo1905 那样建立隧道。
Maven SourceForge 插件不适用于 Maven 2。另外,我相信该插件使用不再受支持的 FTP。
我找到 巡航控制 可以将版本上传到 SFEE,也可以与 Maven 和 Maven2 配合使用