2010-02-17 22 views
16

Ktoś miał doświadczenie w zarządzaniu projektami opartymi na C# z Mavenem?C# Project Management with Maven

Jeśli tak, proszę powiedzieć kilka słów na ten temat, jak dziwnie byłoby stworzyć taką konfigurację.

Dzięki

Odpowiedz

20

Maven jest język agnostykiem i powinno być możliwe, aby używać go z inne języki niż Java, w tym C#. Na przykład model Maven Compiler Plugin można skonfigurować do korzystania z kompilatora csharp. Istnieje również .NET Maven plugin i na javaforge.com pojawił się maven-csharp (wydaje się martwy).

Jednak najwięcej uwagi i mocy człowieka zdobywa Java, a nie robi się zbyt wiele z innymi językami. Tak więc, podczas gdy używanie Mavena z C# jest teoretycznie możliwe, nie oczekiwałbym dużego wsparcia i opinii od społeczności (tj. W razie problemu będziesz sam). Nie wiem, czy używanie Mavena dla C# byłoby dobrym pomysłem. Nie polecałbym tego (może się myliłem oczywiście).

4

Możesz również sprawdzić NPanday (jest to projekt, w który jestem zaangażowany). Chociaż nadal wymaga to trochę pracy, aby lepiej dostosować się do najlepszych praktyk Mavena, jest to najbardziej kompletna i aktywna alternatywa dostępna obecnie. Jedną z unikatowych funkcji jest istnienie dodatku Visual Studio do generowania poprawnego ID2.

12

Pracuję z zestawem składników i aplikacji C# i C++, które są zarządzane przez zależności za pośrednictwem maven. Ogólna zasada "Jeśli można to zrobić za pomocą wiersza poleceń, można to zrobić w maven", więc kończymy na tym, że mamy dużo "kleju" .bat, .exe i powershell, aby wszystkie kawałki razem się odtwarzały.

Największy problem z używaniem maven dla stosu Microsoft to całkowity brak znajomości cyklu budowania/wdrażania/ALM dla dowolnego nowego programisty. Możesz znaleźć wielu programistów z MSBuild, TFSBuild, ANT, itp., Ale rzadko jest znaleźć C# lub C++ dev, który pracował z maven w czystym sklepie Microsoftu. Wdrożenie narzędzia do zarządzania zależnościami i procesem kompilacji jest w związku z tym niezwykle trudne, ponieważ kończysz spędzać dużo czasu na programowaniu szkoleniowym (jaka jest różnica między migawką a wersją?), Nadmiernie komponować produkt, a następnie skalować go, aby uzyskać to dobrze, itp.

Odkryłem również, że musieliśmy pracować wokół maven, aby zrobić coś przypominającego ciągłą integrację i ciągłe dostarczanie. Około 70% naszego stosu technologii to C# (reszta to C++), a my chcemy wdrażać większość tego na serwerach QA każdej nocy z najnowszym i największym kodem domyślnie. Aby zrównoważyć wartość wersji wydań i produktywności deweloperów za pomocą migawek, skonstruowaliśmy proces budowania, w którym każdego wieczora tworzymy kompilację wydania każdego komponentu, a następnie budujemy migawkę. Pozwoliło to programistom nie martwić się o to, że pominiemy POMy, aby zużywać migawki rano. Ogólnie rzecz biorąc, jest to królewski ból, przynajmniej dla kogoś, kto pochodzi z solidnej ciągłej integracji, "buduj i wdrażaj wszystko".

Maven ma wiele obietnic w zakresie zarządzania zależnościami i izolowania przełomowych zmian (szczególnie w komponentach interfejsu, na które konsument i producent muszą się zgodzić). Problemy te zostały rozwiązane w inny sposób (svn externs, kompilacje wdrożeń, zarządzanie wersjami interfejsu itp.). Ale stosunkowo ładnie jest pobrać dowolny komponent, uruchomić "mvn compile" i zobaczyć kompilację kodu (zakładając podstawowy poziom przenośności budowania). Dla mnie jednak koszty ogólne i meta-rozmowy na temat uzyskania właściwej wersji (w przeciwieństwie do skupiania się na wartości klienta) minimalizują wartość całej usługi.

0

maven-kompilator-wtyczka z kompilatorem-plexus-csharp działa dobrze przy następującej konfiguracji. Oczywiście będziesz musiał wskazać rzeczywisty kompilator C# na komputerze z parametrem "wykonywalny".

<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 Core można użyć dotnet-maven-plugin który napędza dotnet i nuget poleceń, a także dodano obsługę np czyszczenie, puszczanie itp. w "Maven way".

Oto przykład konfiguracji wtyczki:

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

(Zwróć uwagę na rodzaj opakowania ustawiony dotnet).

ten będzie następnie odczytać z pliku project.json i uruchomić DotNet i Nuget polecenia zgodnie z fazami cyklu życia takich jak Maven czysty, kompilacji testu zainstalować itp

+0

Updated moją odpowiedź na przykładzie –

Powiązane problemy