23 Stimmen

C#-Projektmanagement mit Maven

Hat jemand Erfahrung mit der Verwaltung von C#-basierten Projekten mit Maven?

Wenn ja, sagen Sie mir bitte ein paar Worte darüber, wie seltsam es wäre, eine solche Einrichtung zu schaffen.

Merci

32voto

Pascal Thivent Punkte 548176

Maven ist sprachunabhängig und es sollte möglich sein, es mit anderen Sprachen als Java, einschließlich C#, zu verwenden. Zum Beispiel, die Maven Compiler-Plugin kann so konfiguriert werden, dass es die csharp Kompilator. Außerdem gibt es eine .NET Maven-Plugin und es gab eine maven-csharp auf javaforge.com (scheint tot zu sein).

Aber Java bekommt die meiste Aufmerksamkeit und die meiste Arbeitskraft, und es wird nicht viel mit anderen Sprachen gemacht. Obwohl die Verwendung von Maven mit C# theoretisch möglich ist, würde ich nicht viel Unterstützung und Feedback von der Community erwarten (d.h. im Falle eines Problems sind Sie allein). Ich weiß nicht, ob die Verwendung von Maven für C# daher eine gute Idee wäre. Ich würde es eigentlich nicht empfehlen (ich kann natürlich falsch liegen).

21voto

mcating Punkte 992

Ich arbeite mit einer Reihe von C#- und C++-Komponenten und -Anwendungen, deren Abhängigkeiten über Maven verwaltet werden. Die allgemeine Regel "Wenn es über die Befehlszeile gemacht werden kann, kann es in Maven gemacht werden" gilt, so dass wir am Ende eine Menge .bat, .exe und Powershell "Kleber" haben, um alle Teile zusammen spielen zu lassen.

Das größte Problem bei der Verwendung von Maven für einen Microsoft-Stack ist der völlige Mangel an Vertrautheit mit dem Build/Deployment/ALM-Zyklus für JEDEN neuen Entwickler. Sie können viele Entwickler mit MSBuild, TFSBuild, ANT, etc. finden, aber es ist eine seltene Sache, einen C# oder C++ Entwickler zu finden, der mit Maven in einem reinen Microsoft Shop gearbeitet hat. Die Einführung von Maven für das Abhängigkeitsmanagement und den Build-Prozess ist folglich extrem schwierig, da man am Ende sehr viel Zeit damit verbringt, die Entwickler zu schulen (was ist der Unterschied zwischen einem Snapshot und einem Release?), das Produkt zu stark zu komponieren und es dann zurückzuschrauben, um es richtig zu machen, usw.

Ich habe auch festgestellt, dass wir Maven umgehen mussten, um so etwas wie kontinuierliche Integration und kontinuierliche Bereitstellung zu erreichen. Etwa 70 % unseres Technologie-Stacks besteht aus C# (der Rest ist C++), und wir wollen den größten Teil davon jede Nacht mit dem neuesten und besten Code standardmäßig auf QA-Servern bereitstellen. Um den Wert von Release-Builds gegenüber der Entwicklerproduktivität durch Snapshots abzuwägen, haben wir einen Build-Prozess entwickelt, bei dem wir jede Nacht einen Release-Build jeder Komponente erstellen, gefolgt von einem Snapshot-Build. Auf diese Weise müssen sich die Entwickler nicht darum kümmern, POMs zu überarbeiten, um die Snapshots am Morgen zu nutzen. Alles in allem ist das eine echte Qual, zumindest für jemanden, der aus robusten Continuous-Integration-Umgebungen kommt, in denen alles gebaut und bereitgestellt wird.

Maven verspricht viel für die Verwaltung von Abhängigkeiten und die Isolierung von Änderungen (insbesondere bei Schnittstellenkomponenten, bei denen der Konsument und der Produzent zustimmen müssen). Diese Probleme wurden bereits auf andere Weise gelöst (svn externs, Deployment-Builds, Interface-Versionsmanagement, usw.). Aber es ist relativ angenehm, eine beliebige Komponente herunterzuladen, "mvn compile" auszuführen und zu sehen, wie der Code kompiliert wird (ein gewisses Maß an Portabilität der Builds vorausgesetzt). Für mich minimieren jedoch der Overhead und die Meta-Konversationen über das richtige Build (im Gegensatz zur Konzentration auf den Kundennutzen) den Wert von Maven insgesamt.

7voto

Kasper Sørensen Punkte 311

Für .NET Core können Sie die dotnet-maven-plugin die die dotnet y nuget Befehle, sowie Unterstützung für z.B. Bereinigung, Freigabe usw. auf die "Maven-Art".

Hier ist ein Beispiel für eine Plugin-Konfiguration:

<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>

(Beachten Sie, dass der Verpackungstyp auf dotnet eingestellt ist).

Diese liest dann aus der project.json-Datei und führt Dotnet- und Nuget-Befehle entsprechend den Phasen des Maven-Lebenszyklus wie Clean, Compile, Test, Install usw. aus.

4voto

Brett Porter Punkte 5737

Sie könnten auch Folgendes überprüfen NPanday (es handelt sich um ein Projekt, an dem ich beteiligt bin). Obwohl es noch etwas Arbeit benötigt, um sich besser an die Best Practices von Maven anzupassen, ist es die vollständigste und aktivste Alternative, die derzeit verfügbar ist. Ein einzigartiges Merkmal ist das Vorhandensein eines Visual Studio Add-Ins zur Generierung der korrekten pom.xml aus der IDE.

0voto

Wim Coenen Punkte 64891

Es gibt eine NMaven Projekt bei Codeplex, aber es scheint nicht aktiv oder beliebt zu sein. Siehe auch diese Fragen:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X