我正在将 SourceForge 用于一些开源项目,并且我想自动将发布部署到 SourceForge 文件发布系统。我使用 Maven 进行构建,除非您进行一些手动准备工作,否则标准的 SFTP 部署机制似乎不起作用。我在其他论坛上遇到过一些旧帖子,建议唯一的方法是专门为 SourceForge 编写 Wagon。
有人最近有这方面的经验吗?
我正在将 SourceForge 用于一些开源项目,并且我想自动将发布部署到 SourceForge 文件发布系统。我使用 Maven 进行构建,除非您进行一些手动准备工作,否则标准的 SFTP 部署机制似乎不起作用。我在其他论坛上遇到过一些旧帖子,建议唯一的方法是专门为 SourceForge 编写 Wagon。
有人最近有这方面的经验吗?
我无法对此进行测试以确认,但我相信无需编写任何插件即可。
您可以使用 SCP 部署到 SourceForge,并且可以将 maven-deploy-plugin 配置为使用 SCP,因此它应该可以工作。您还可以通过 SCP将您的站点部署到 SourceForge 。
您可以在 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 包部署到我的项目页面的文件部分。
您需要在设置中更改以下内容才能使其正常工作:
在我的 $HOME/.m2/settings.xml 文件中,SF 服务器具有以下内容:
<server>
<id>sourceforge</id>
<password>secret</password>
<filePermissions>775</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
我没有在 settings.xml 文件中指定用户名,因为它需要是 username,project 并且我想将多个包部署到 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
这将在它们的末尾创建一个外壳,其中一个文件夹安装到您的项目的路径上,例如(取决于您的项目名称):
/home/groups/c/ch/chex4j/
在那个shell中,我在sourceforge服务器上为我的repo在项目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 文件夹,请告诉您目录列表默认关闭以及如何修复它。要在服务器外壳上执行此操作,您在 htdocs/maven2 文件夹中创建一个 .htaccess 文件,其中包含以下 apache 选项
Options +Indexes
然后宾果游戏,你有一个 maven repo,它看起来像:
http://chex4j.sourceforge.net/maven2/net/sf/chex4j/chex4j-core/1.0.0/
您的 sf.net shell 会在几个小时后关闭以不占用资源;因此,当您想要部署站点或构建工件时,您可以运行“ssh -t ... create”。
您可以在 sourceforge 下浏览我所有的 maven 项目代码以查看我的工作设置:
http://chex4j.svn.sourceforge.net/viewvc/chex4j/branches/1.0.x/chex4j-core/
SCP URL确实有效。但不要在服务器名称后使用“:”。MVN 尝试将以下测试读取为整数(端口号)。
您不需要像 simbo1905 那样建立隧道。
Maven SourceForge 插件不适用于 Maven 2。另外我相信这个插件使用了不再支持的 FTP。
我发现CruiseControl可以将发布上传到 SFEE,并且还可以与 Maven 和 Maven2 一起使用