Pas*_*ent 26
Maven与语言无关,应该可以将它与Java之外的其他语言一起使用,包括C#.例如,可以将Maven编译器插件配置为使用csharp编译器.还有一个.NET Maven插件,javaforge.com上有一个maven-csharp(似乎已经死了).
但是Java受到了最多的关注和人力,而其他语言并没有做太多.因此,虽然在理论上使用Maven和C#是可能的,但我不希望社区提供太多的支持和反馈(即如果出现问题,你将独自一人).我不知道是否使用Maven for C#是个好主意.我实际上不推荐它(当然我可能是错的).
mca*_*ing 15
我使用一套C#和C++组件以及通过maven依赖管理的应用程序.一般规则"如果它可以通过命令行完成,它可以在maven中完成"持有,所以我们最终有很多.bat,.exe和powershell"粘合"来让所有部分一起玩.
将maven用于Microsoft堆栈的最大问题是完全不熟悉任何新开发人员的构建/部署/ ALM周期.您可以找到许多具有MSBuild,TFSBuild,ANT等经验的开发人员,但是在纯粹的微软商店中找到与maven合作的C#或C++开发人员是一件罕见的事情.因此,推出依赖管理和构建过程的maven是非常困难的,因为你最终花了很多时间培训开发人员(快照和发布之间有什么区别?),过度组件化产品然后缩小它以获得它是正确的等等
我还发现,我们必须围绕maven工作,做一些类似于持续集成和持续交付的事情.我们大约70%的技术堆栈是C#(其余的是C++),我们希望每晚都使用最新和最好的代码将大部分技术部署到QA服务器上.为了通过快照平衡发布版本与开发生产力的价值,我们最终构建了一个构建过程,我们每晚创建每个组件的发布版本,然后创建快照.这让开发人员不必担心在早上碰到POM以消耗快照.总的来说,这是一个皇家的痛苦,至少对于来自强大的持续集成,"构建和部署一切"环境的人来说.
Maven对依赖管理和隔离突破性变更有很大的希望(特别是在消费者和生产者必须同意的界面组件中).这些问题已经通过其他方式解决(svn externs,部署版本,界面版本管理等).但下载任何组件,运行"mvn compile",并查看代码编译(假设基本级别的构建可移植性)相对比较好.但对我来说,关于获得正确构建的开销和元对话(而不是关注客户价值)可以最大限度地降低整个maven的价值.
对于.NET Core,您可以使用dotnet-maven-plugin来驱动dotnet和nuget命令,并在"Maven方式"中添加对例如清理,释放等的支持.
这是一个示例插件配置:
<project>
[...]
<packaging>dotnet</packaging>
[...]
<build>
<plugins>
<plugin>
<groupId>org.eobjects.build</groupId>
<artifactId>dotnet-maven-plugin</artifactId>
<version>0.11</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
[...]
</project>
Run Code Online (Sandbox Code Playgroud)
(注意包装类型设置为dotnet).
然后,这将从project.json文件中读取并根据maven生命周期阶段运行dotnet和nuget命令,例如清理,编译,测试,安装等.