emm*_*mby 305 github maven github-pages mvn-repo
我有一个小型开源库的分支,我正在github上工作.我想通过maven将其提供给其他开发人员,但我不想运行自己的Nexus服务器,因为它是一个分支,我不能轻易地将它部署到oss.sonatype.org.
我想要做的是将它部署到github,以便其他人可以使用maven访问它.最好的方法是什么?
emm*_*mby 471
我能找到的最佳解决方案包括以下步骤:
mvn-repo
托管maven工件的分支.mvn-repo
用作maven存储库.使用此方法有几个好处:
mvn-repo
,就像github页面被保存在一个单独的分支中一样gh-pages
(如果你使用github页面)gh-pages
如果您使用它们,它不会与您的解决方案冲突.mvn deploy
像往常一样使用将工件部署到远程maven仓库的典型方法是使用mvn deploy
,所以让我们修补此解决方案的机制.
首先,告诉maven将工件部署到目标目录中的临时临时位置.将此添加到您的pom.xml
:
<distributionManagement>
<repository>
<id>internal.repo</id>
<name>Temporary Staging Repository</name>
<url>file://${project.build.directory}/mvn-repo</url>
</repository>
</distributionManagement>
<plugins>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository>
</configuration>
</plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)
现在尝试跑步mvn clean deploy
.您将看到它将您的maven存储库部署到target/mvn-repo
.下一步是让它将该目录上传到GitHub.
添加您的身份验证信息,~/.m2/settings.xml
以便github site-maven-plugin
可以推送到GitHub:
<!-- NOTE: MAKE SURE THAT settings.xml IS NOT WORLD READABLE! -->
<settings>
<servers>
<server>
<id>github</id>
<username>YOUR-USERNAME</username>
<password>YOUR-PASSWORD</password>
</server>
</servers>
</settings>
Run Code Online (Sandbox Code Playgroud)
(如上所述,请chmod 700 settings.xml
确保没有人可以在文件中读取您的密码.如果有人知道如何使用site-maven-plugin提示输入密码而不是在配置文件中要求,请告诉我.)
然后site-maven-plugin
通过将以下内容添加到您的pom中,告诉GitHub 您刚刚配置的新服务器:
<properties>
<!-- github server corresponds to entry in ~/.m2/settings.xml -->
<github.global.server>github</github.global.server>
</properties>
Run Code Online (Sandbox Code Playgroud)
最后,配置site-maven-plugin
从临时staging repo上传到mvn-repo
Github 上的分支:
<build>
<plugins>
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>0.11</version>
<configuration>
<message>Maven artifacts for ${project.version}</message> <!-- git commit message -->
<noJekyll>true</noJekyll> <!-- disable webpage processing -->
<outputDirectory>${project.build.directory}/mvn-repo</outputDirectory> <!-- matches distribution management repository url above -->
<branch>refs/heads/mvn-repo</branch> <!-- remote branch name -->
<includes><include>**/*</include></includes>
<repositoryName>YOUR-REPOSITORY-NAME</repositoryName> <!-- github repo name -->
<repositoryOwner>YOUR-GITHUB-USERNAME</repositoryOwner> <!-- github username -->
</configuration>
<executions>
<!-- run site-maven-plugin's 'site' target as part of the build's normal 'deploy' phase -->
<execution>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
该mvn-repo
分支,不需要存在,它会为你创建.
现在又跑mvn clean deploy
了.您应该看到maven-deploy-plugin将文件"上传"到目标目录中的本地staging存储库,然后site-maven-plugin提交这些文件并将它们推送到服务器.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building DaoCore 1.3-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ greendao ---
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.jar (77 KB at 2936.9 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.pom (3 KB at 1402.3 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/maven-metadata.xml (768 B at 150.0 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/maven-metadata.xml (282 B at 91.8 KB/sec)
[INFO]
[INFO] --- site-maven-plugin:0.7:site (default) @ greendao ---
[INFO] Creating 24 blobs
[INFO] Creating tree with 25 blob entries
[INFO] Creating commit with SHA-1: 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] Updating reference refs/heads/mvn-repo from ab7afb9a228bf33d9e04db39d178f96a7a225593 to 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.595s
[INFO] Finished at: Sun Dec 23 11:23:03 MST 2012
[INFO] Final Memory: 9M/81M
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
在浏览器中访问github.com,选择mvn-repo
分支,并验证所有二进制文件现在都在那里.
恭喜!
您现在可以通过运行将您的maven工件部署到穷人的公共仓库mvn clean deploy
.
您还需要采取一个步骤,即配置依赖于您的pom的任何pom,以了解您的存储库的位置.将以下代码段添加到依赖于项目的任何项目的pom中:
<repositories>
<repository>
<id>YOUR-PROJECT-NAME-mvn-repo</id>
<url>https://raw.github.com/YOUR-USERNAME/YOUR-PROJECT-NAME/mvn-repo/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)
现在任何需要jar文件的项目都会自动从你的github maven存储库下载它们.
编辑:避免注释中提到的问题('创建提交错误:无效请求.对于'属性/名称',nil不是字符串.'),请确保在github上的配置文件中声明了一个名称.
Bae*_*Bae 118
不要将GitHub用作Maven资源库.
编辑:此选项获得了大量的投票,但没有评论为什么.无论在GitHub上实际托管的技术能力如何,这都是正确的选择.由于下面列出的所有原因而在GitHub上托管是错误的,如果没有评论,我无法改进答案以澄清您的问题.
最佳选择 - 与原始项目协作
最好的选择是说服原始项目包含您的更改并坚持使用原始项目.
替代方案 - 维护自己的叉子
由于您已经分叉了一个开源库,并且您的fork也是开源的,因此您可以将您的fork上传到Maven Central(阅读将工件上载到中央存储库的指南),为其提供一个新的groupId
,也许是一个新的artifactId
.
如果您愿意维护此分支,直到将更改合并到原始项目中,然后您应该放弃这个选项,则只考虑此选项.
真的很难认为叉子是否是正确的选择.阅读无数谷歌搜索结果'为什么不分叉'
推理
使用jar扩展您的存储库会增加下载大小,无益
jar是output
你的项目之一,它可以随时从它重新生成inputs
,你的GitHub repo应该只包含inputs
.
不相信我?然后检查Google搜索结果"不要在git中存储二进制文件".
GitHub的帮助处理大文件会告诉你同样的事情.不可否认,jar并不大,但它们比源代码更大,一旦发布了jar,他们就没有理由进行版本控制 - 这就是新版本的用途.
在pom.xml中定义多个repos可以减少存储库数量减去工件数量
斯蒂芬康诺利说:
如果有人添加你的repo他们会影响他们的构建性能,因为他们现在有另一个repo来检查工件...如果你只需要添加一个repo,这不是一个大问题......但问题在增长,接下来你知道你的maven build正在检查每个工件的50个回购,并且构建时间是一只狗.
那就对了!Maven需要针对您定义的每个存储库检查pom.xml中定义的每个工件(及其依赖关系),因为任何这些存储库中都可以使用较新的版本.
为自己尝试一下,你会感受到缓慢构建的痛苦.
文物的最佳位置是Maven Central,因为它是罐子的中心位置,这意味着你的构建只会检查一个地方.
您可以在Maven的存储库简介文档中阅读有关存储库的更多信息
And*_*ejs 45
您可以使用JitPack(免费用于公共Git存储库)将您的GitHub存储库公开为Maven工件.它很容易.您的用户需要将其添加到他们的pom.xml:
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
Run Code Online (Sandbox Code Playgroud)
<dependency>
<groupId>com.github.User</groupId>
<artifactId>Repo name</artifactId>
<version>Release tag</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
正如其他地方所解释的那样,JitPack将构建您的GitHub仓库,并将为罐子服务.要求是您有一个构建文件和一个GitHub版本.
好消息是您不必处理部署和上传.由于您不想维护自己的工件库,因此可以很好地满足您的需求.
Rus*_*pez 16
自 2019 年以来,您现在可以使用名为Github 包注册表的新功能。
基本上流程是:
settings.xml
部署使用
mvn deploy -Dregistry=https://maven.pkg.github.com/yourusername -Dtoken=yor_token
Run Code Online (Sandbox Code Playgroud)另一种方法是使用webdav支持的任何web托管.当然,你需要一些空间,但设置起来很简单,是运行完整的nexus服务器的好选择.
将此添加到您的构建部分
<extensions>
<extension>
<artifactId>wagon-webdav-jackrabbit</artifactId>
<groupId>org.apache.maven.wagon</groupId>
<version>2.2</version>
</extension>
</extensions>
Run Code Online (Sandbox Code Playgroud)
将这样的内容添加到您的distributionManagement部分
<repository>
<id>release.repo</id>
<url>dav:http://repo.jillesvangurp.com/releases/</url>
</repository>
Run Code Online (Sandbox Code Playgroud)
最后确保在settings.xml中设置存储库访问权限
将此添加到您的服务器部分
<server>
<id>release.repo</id>
<username>xxxx</username>
<password>xxxx</password>
</server>
Run Code Online (Sandbox Code Playgroud)
以及您的存储库部分的定义
<repository>
<id>release.repo</id>
<url>http://repo.jillesvangurp.com/releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
Run Code Online (Sandbox Code Playgroud)
最后,如果您有任何标准的PHP托管,您可以使用sabredav之类的东西来添加webdav功能.
优点:您拥有自己的maven存储库缺点:您在nexus中没有任何管理功能; 你需要在某处设置一些webdav
作为替代方案,Bintray提供免费托管maven存储库.如果你绝对不想重命名groupId,这可能是Sonatype OSS和Maven Central的一个很好的替代品.但请,至少要努力将您的更改集成到上游或重命名并发布到Central.它使其他人更容易使用你的分叉.