Maven - do czego to służy ?

0

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 ?

3
  1. 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.
  2. 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.
0

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ąć.

0

Takich rozwiązań dla C++ jest pewnie N, ale wiarygodnie wyglądają np. te:

0

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.

3

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

0

Korzyści są co najmniej dwie, jak już zresztą wspomniano:

  1. Ś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.
  2. 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ą.
0

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1