Witam , wiem że to jakieś " narzedzie do budowania projektu " ale czy może ktoś mi wyjaśnić jakie sa korzysci z jego stosowania i czy można zrobic pelnoprawna aplikacje w springu bez uzycia mavena lub jego odpowiednika ?
- Pozwala uniknąć klasycznych problemów znanych z innych języków, czyli instalowania miliona bibliotek żeby skompilować kod. Maven pozwala ci zadeklarować z jakich bibliotek korzysta twoja aplikacja i sam je ściagnie i zbuduje aplikacje. W efekcie zbudowanie dowolnej mavenowej aplikacji sprowadza sie do napisania
mvn install
. Analogiczna operacja w C czy C++ wymagałaby szukania w internecie pewnie setki bibliotek ;) Oprócz centralnych repozytoriów mavena można postawic swoje własne lokalne, dzięki czemu można w firmie mieć także repozytorium z "wewnetrznymi" bibliotekami. - Można, tylko że to utrudnianie sobie życia, bo juz na starcie będziesz sie bawił w ściaganie setki jarów ze springiem i potem spinania ich z projektem.
Analogiczna operacja w C czy C++ wymagałaby szukania w internecie pewnie setki bibliotek
Visual C++ ma swojego NuGeta, ale ja nie przepadam za tego typu rozwiązaniami bo nie są ragnarok-proof. Uzależniasz się od czyichś repozytoriów które kiedyś mogą zniknąć.
Takich rozwiązań dla C++ jest pewnie N, ale wiarygodnie wyglądają np. te:
- Conan C/C++
- Gradle (1.0)
- biicode
Warto jeszcze wspomnieć na przykład o zautomatyzowanym pakowaniu projektu do pliku jaki sobie zdefiniujesz (jest sporo pluginów do tego). Wklepujesz komendę i jest wszystko, czego potrzebujesz.
@Azarien @vpiotr tylko że to nie są żadne standardy, podczas gdy Maven (i częściowo Gradle) takimi są. Poza tym w przypadku Javy/JVM jest łatwiej bo mamy bajtkod i wsteczna kompatybilność. W przypadku C/C++ musisz znaleźć bibliotekę kompilowaną pod odpowiednie środowisko, odpowiedni system, odpowiednią architekturę itd a potem zrekompilujesz swoją aplikacje nową wersja kompilatora i przestanie coś działać...
Co do znikających repo, nie jest problemem postawienie własnego repozytorium i większość firm tak właśnie robi. Ma swoje repo, które mirroruje maven central plus trzyma też "wewnętrzne" artefakty firmowe. Zero ryzyka.
Korzyści są co najmniej dwie, jak już zresztą wspomniano:
- Ściąganie zależności. Warto wspomnieć, że Maven oprócz ściągania zależności wbitych bezpośrednio ściąga również zależności przechodnie, a więc jeśli importujemy bibliotekę X, a biblioteka X wymaga biblioteki Y i podobnie biblioteka Y wymaga biblioteki Z to Maven ściągnie wszystkie trzy biblioteki mimo iż zaimportowaliśmy tylko jedną (o nazwie X). Ponadto Maven sprawdza i (typowo) rozwiązuje konflikty wersji - jeśli biblioteka X wykorzystuje bibliotekę L w wersji 1, a biblioteka Y wykorzystuje bibliotekę L w wersji 2 to w zależności od opcji Maven albo krzyknie, że coś się nie zgadza albo spróbuje rozwiązać konflikt wybierając najnowszą wymaganą wersję biblioteki L.
- Ustandaryzowany proces budowania projektu. To pociąga za sobą dwie rzeczy: jedna to powszechne obycie z tym procesem (bo Maven to generalnie Javowy standard), a co za tym idzie szybkie wdrażanie w kolejne projekty oparte o Mavena, a druga to masa gotowców (np szablonów czy wtyczek do Mavena), które można zintegrować z naszą konfiguracją Mavenową.
Robię projekty w w Intellij korzystając z mavena, ale wrzycam tylko biblioteki w <dependencies>. W komercyjnych projektach webowych korzysta się z takiej konfiguracji? czy może jest coś takiego (build, pluginy, executions, goals)? Piszę bo @Shalom napisał że zbudowanie apki sprowadza się do mvn install, jak tak nie buduję, ani nie wprowadzam takiego kodu jak poniżej. Warto tak konfigurować projekt?
przykład:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>hello.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Zwykle ma się jakis plugin i jego konfiguracje, szczególnie jeśli cośtam trzeba zaczarować np zrobić runnable jar/war czy coś. Ale to są szczegóły. U mnie zresztą w pracy mamy trochę własnych pluginów do mavena.