2010-02-17 262 views
16

任何人都有使用Maven管理基於C#的項目的經驗?使用Maven進行C#項目管理

如果是,請告訴我幾句關於它的信息,創建這樣的設置有多奇怪。

感謝

回答

20

Maven是語言無關的,它有可能需要使用它除Java之外的其他語言,包括C#。例如,Maven Compiler Plugin可以配置爲使用csharp編譯器。還有一個.NET Maven plugin,在javaforge.com上有一個maven-csharp(似乎已經死了)。

但是Java越來越受到人們的關注和人們的關注,而其他語言並沒有太多的工作要做。因此,儘管在理論上使用Maven與C#是可能的,但我不會期望社區提供很多支持和反饋(即在出現問題的情況下,您將獨處)。我不知道如果使用Maven for C#會是一個好主意。我不會真的推薦它(當然我可能是錯的)。

4

您可能還會退房NPanday(這是一個我參與的項目)。儘管它仍然需要一些工作來更貼近Maven的最佳實踐,但它是目前最完整和最活躍的替代方案。一個獨特的功能就是存在一個Visual Studio加載項,用於從IDE生成正確的pom.xml

12

我使用一套C#和C++組件以及通過maven進行依賴管理的應用程序。 「如果它可以通過命令行完成,它可以在maven中完成」的一般規則,所以我們最終得到了很多.bat,.exe和powershell「粘合劑」來​​獲得所有作品。

對於Microsoft堆棧使用maven最大的問題是完全不熟悉任何新開發人員的構建/部署/ ALM週期。你可以找到許多有MSBuild,TFSBuild,ANT等經驗的開發者,但是找到一個在純粹的微軟商店中與maven合作的C#或C++開發者是一件罕見的事情。由於您最終需要花費大量時間培訓開發人員(快照與發佈之間的區別是什麼?),因此將產品過度組件化,然後將其擴展到獲得,從而導致用於依賴管理和構建過程的maven的推出非常困難它正確等。

我也發現我們不得不圍繞maven做類似持續集成和持續交付的事情。我們的技術堆棧中約70%是C#(其餘爲C++),並且我們希望每晚在QA服務器上部署大部分的默認最新和最大的代碼。爲了通過快照來平衡發佈版本與開發生產力的價值,我們最終構建了一個構建過程,在該過程中,我們每晚創建每個組件的發佈版本,然後創建快照。這讓開發人員不必擔心在早上碰撞POM來消費快照。總的來說,這是一場皇家的痛苦,至少對於來自穩健持續集成的人來說,「構建和部署一切」環境。

Maven擁有很多承諾依賴管理和隔離中斷變化(特別是在消費者和生產者必須同意的接口組件)。這些問題已經通過其他方式解決(svn externs,部署版本,接口版本管理等)。但是,下載任何組件,運行「mvn compile」並查看代碼編譯(假設構建可移植性的基本級別)是相當不錯的。然而,對我來說,關於如何使構建正確(而不是關注客戶價值)的開銷和元對話最大限度地降低了maven的總體價值。

0

使用plexus-compiler-csharp的maven-compiler-plugin可以很好地處理以下配置。當然,您必須使用「可執行」參數指向計算機上實際的C#編譯器。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.0</version> 
    <configuration> 
     <compilerId>csharp</compilerId> 
     <fork>true</fork> 
     <executable>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe</executable> 
     <outputFileName>myDLL</outputFileName> 
    </configuration> 
    <dependencies> 
     <dependency> 
      <groupId>org.codehaus.plexus</groupId> 
      <artifactId>plexus-compiler-csharp</artifactId> 
      <version>2.2</version> 
     </dependency> 
    </dependencies> 
</plugin> 
3

對於.NET核心,可以使用其驅動dotnetnuget命令,以及增加了對例如支持dotnet-maven-plugin清潔,釋放等「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> 

(注意包裝類型設置爲的dotnet)。然後

這將從project.json文件中讀取並運行DOTNET和的NuGet命令根據Maven的生命週期階段,如清潔,編譯,測試,安裝等

+0

更新我的答案用一個例子 – 2017-01-31 15:21:58