使用Maven构建和部署本机代码
我花了数年时间试图将使用本机代码的库部署到Maven Central。我遇到了以下问题:使用Maven构建和部署本机代码,maven,maven-release-plugin,Maven,Maven Release Plugin,我花了数年时间试图将使用本机代码的库部署到Maven Central。我遇到了以下问题: 没有任何好的插件可以使用Maven构建本机代码。这是一个非常严格的构建系统,除其他外,使得调试生成的二进制文件变得非常困难。您必须手动将本机maven插件构建系统与用于调试的本机IDE同步 Maven没有替换部署的pom.xml文件中的变量:。这意味着库必须为每个Maven概要文件声明一次特定于平台的依赖项(而不是声明一次依赖项并为每个概要文件设置不同的分类器);否则,依赖于您的库的任何人都必须在其项目文件
我将用这个Stackoverflow问题来记录我是如何克服这些限制的。以下是我是如何克服上述问题的:
- Maven不支持CMake,所以我构建了自己的插件:
- 我计划在不久的将来进行调查并作为替代方案
mvn versions:set
将版本号从快照更改为发行版,然后再更改nexus staging:rc open
、nexus staging:deploy-DstagingProfileId=${stagingProfileId}-DstagingRepositoryId=${stagingpositoryid}
和nexus staging:rc close
将不同平台的工件上载到同一存储库中。这称为“分段工作流”(参见下文),不可能以原子方式释放快照工件(没有解决方法)。发布快照时,需要跳过rc open
,rc close
并调用nexus staging:deploy
,而不使用-DstagingProfileId=${stagingProfileId}-DstagingRepositoryId=${stagingpositoryid}
。每个工件都将上载到一个单独的存储库中
在最后一个反应堆模块中必须为false(否则不会部署任何工件):。最好的解决方法是使用Maven概要文件在部署时省略任何您想要的模块(根本不要使用skipNexusStagingDeployMojo
)skipNexusStagingDeployMojo
防止将多个工件部署到同一存储库中:skipLocalStaging