如何将工件从Maven构建部署到SourceForge文件发布系统?
我正在将SourceForge用于某些开放源代码项目,并且希望将发布的部署自动化到SourceForge文件发布系统。我使用Maven进行构建,除非我们进行一些手动准备工作,否则标准SFTP部署机制似乎无法正常工作。我在其他论坛上看到过一些旧帖子,建议唯一的方法是专门为SourceForge编写Wagon。
最近有人对此有经验吗?
解决方案
回答
Maven SourceForge插件不适用于Maven2. 另外,我相信该插件使用不再受支持的FTP。
回答
看来我将不得不自己写这个。
https://sourceforge.net/projects/wagon-sf/
回答
我发现CruiseControl可以将发行版本上载到SFEE,并且还可以与Maven和Maven2一起使用
回答
我无法通过测试来确认,但是我相信无需编写任何插件就可以实现。
我们可以使用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>
回答
经过多次尝试后,我终于使它可以工作-使用sftp not scp。这应该在unix盒(或者Mac)上运行-我不确定Windoze的sftp客户端。我正在使用mvn 2.2.0版,但我认为我没有安装任何特殊的插件。这会将各种mvn软件包部署到我的项目页面的"文件"部分。
我们需要在设置中更改以下内容才能使其正常工作:
- 用户-用sourceforce用户名替换
- 秘密-用密码替换
- Ormlite-用项目名称替换
- / o / or /-用项目名称的前两个字符和前两个字符替换
在我的$ 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,[email protected]:/home/frs/project/o/or/ormlite/releases </url> </repository> <snapshotRepository> <id>sourceforge</id> <name>SourceForge</name> <url>sftp://user,[email protected]:/home/frs/project/o/or/ormlite/snapshots </url> </snapshotRepository> </distributionManagement>
显然,可以根据文件层次结构更改/ releases和/ snapshots目录后缀。
回答
其中timp =用户,webmacro =项目
scp网址不起作用:
scp://timp,[email protected]:/home/groups/w/we/webmacro/htdocs/maven2/
sftp url的工作原理:
sftp://timp,[email protected]:/home/groups/w/we/webmacro/htdocs/maven2
或者用于项目发布工件:
sftp://timp,[email protected]:/home/frs/project/w/we/webmacro/releases
scp可以在shell.sourceforge.net上工作,但是我们必须先创建外壳,然后将其与
ssh -t timp,[email protected] create
回答
我已将示例上传到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>
回答
事实证明,这确实没有那么难。首先,我有mvn site:deploy按照此sourceforge网站上的说明进行工作。基本上,我们使用以下命令启动sourceforge shell
ssh -t user,[email protected] create
这将在外壳的末端创建外壳,并在路径上(例如,取决于项目名称)将文件夹安装到项目:
/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命令的条目。然后,我要做的就是启动外壳连接以启动服务器端,然后在本地端运行:
mvn deploy
它将jar,pom和源等上传到我的sourceforge项目网站上。如果我们尝试在项目网站上打/ maven2文件夹,则sourceforge会告诉我们默认情况下目录列表是关闭的,以及如何修复它。要在服务器外壳上执行此操作,请在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 URL确实有效。但是不要在服务器名称后使用":"。 MVN尝试将以下测试读取为整数(端口号)。
我们不需要像simbo1905那样建立隧道。