【发布时间】:2010-09-06 04:48:12
【问题描述】:
我正在将 SourceForge 用于一些开源项目,并且我想自动将发布部署到 SourceForge 文件发布系统。我使用 Maven 进行构建,除非您进行一些手动准备工作,否则标准的 SFTP 部署机制似乎不起作用。我在其他论坛上看到了一些旧帖子,建议唯一的方法是专门为 SourceForge 编写 Wagon。
最近有人有这方面的经验吗?
【问题讨论】:
标签: java maven-2 sourceforge
我正在将 SourceForge 用于一些开源项目,并且我想自动将发布部署到 SourceForge 文件发布系统。我使用 Maven 进行构建,除非您进行一些手动准备工作,否则标准的 SFTP 部署机制似乎不起作用。我在其他论坛上看到了一些旧帖子,建议唯一的方法是专门为 SourceForge 编写 Wagon。
最近有人有这方面的经验吗?
【问题讨论】:
标签: java maven-2 sourceforge
我无法对此进行测试以确认,但我相信无需编写任何插件即可。
你可以deploy to SourceForge using SCP,maven-deploy-plugin 可以配置为use SCP,所以它应该可以工作。您还可以通过 SCP 部署您的 site to 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 not 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 文件中指定用户名,因为它需要是用户名,项目,并且我想将多个包部署到 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,但您必须在与
一起使用之前创建 shellssh -t timp,webmacro@shell.sourceforge.net create
【讨论】:
这真的没有那么难。首先,我让 mvn site:deploy 按照this sourceforge site 的说明工作。基本上你用
启动 sourceforge shellssh -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 文件夹,请告诉您目录列表默认关闭以及如何修复它。要在服务器 shell 上执行此操作,您需要在 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 一起使用
【讨论】: