2012-06-05 13 views
5

Piszę aplikację, która wymaga ode mnie pobrania słoika podanego przez mavens groupid/artifactid/version.W jaki sposób mogę pobrać słoik za pomocą programisty programistycznie

Obecnie zacząć

public Model pomToModel(String pomUrl) throws Exception { 
URL url = new URL(pomUrl); 
    InputStream stream = url.openStream(); 
    try { 
     Model model = new MavenXpp3Reader().read(stream); 
     return model; 
    } finally { 
     stream.close(); 
    } 
} 

Więc biorąc pod uwagę url POM, Mam teraz obiekt Maven model reprezentujący go. To wydaje się działać dobrze.

Co chciałbym zrobić wiedzieć dwie rzeczy:

  1. znaleźć adres URL artefaktu słoik, że model reprezentuje w repozytorium maven, że plugin Maven byłoby wykorzystać
  2. dany model, znaleźć plik reprezentujący słoik w lokalnym repozytorium

mam już biednych jakości rozwiązań: idę do mvnrepository.com ręcznego kodowania URL, i używam ~/.m2/repozytorium jako przedrostek dla pliku. Mogę oczywiście ulepszyć to rozwiązanie, ale skończę słabo powielać kod, który jest dobrze przetestowany i dobrze wykorzystany w bazie kodu maven.

Naprawdę chciałbym wiedzieć, jak to zrobić, używając klas maven.

Zrobiłem sporo wyszukiwania google, ale zabawną rzeczą w wyszukiwaniu czegokolwiek na temat maven i słoików (nawet na stackoverflow) jest to, że znajduję wiele rozwiązań, jak używać maven, a nie jak kodować za pomocą klasy mavenów.

Dzięki za pomoc

+0

Maven pobieranie wszystkich jar pliki określone w jego pliku pom.xml. –

+0

przyjrzyj się także [jcabi-aether] (http://www.jcabi.com/jcabi-aether/), co może pomóc w ułatwieniu tego i w mniejszej linii kodu – yegor256

Odpowiedz

2

pobrać artefakty z repozytorium Maven jest przeznaczony do wykorzystania Aether lib.

Zobacz także http://www.sonatype.com/people/category/aether/

Ponadto istnieją examples jak robić rzeczy i kompletny kod źródłowy Aether lib. Dawno temu i had played a little gryzę z Etererem.

+0

Cóż, spędziłem niezadowolone kilka godzin gra z Etererem. Czy jest gdzieś samouczek lub blog? Dema nie kompilują się, klasy, które wymieniają, wydają się nie istnieć. Pozostanę jeszcze przez kilka godzin, zanim uderzę głową o biurko :) –

+0

Tak, zajrzyj do środka: https://github.com/sonatype/sonatype-aether/tree/master/aether-demo – khmarbaise

+0

Tutaj jest wyjaśnienie, jak używać kodu, z linkiem do przykładowej wtyczki, która to robi: http://www.sonatype.com/people/2011/01/how-to-use-aether-in-maven-plugins/ – Noremac

5

Opcja 1

Eter zgodnie z zaleceniami Khmerbaise.

To natywna biblioteka dostarczana z Maven 3.0

Opcji 2

Jeśli chcesz proste rozwiązanie do pobierania modułów Maven z linii poleceń lub w skrypcie powłoki, Apache Ivy ma standalone jar.

Przykład:

using IVY dependencies manager programmatically

Wariant 3

Jeśli jesteś po prostu patrząc na słoiku Maven i nie dbają o zarządzania zależność jest jeszcze prostsze.

Oto jak pobrać słoik log4j bezpośrednio z Maven Central:

curl -O http://search.maven.org/remotecontent?filepath=log4j/log4j/1.2.17/log4j-1.2.17.jar 

Jeśli używasz menedżera repozytorium Nexus to posiada przydatną API REST

Using the Nexus rest API to get latest artifact version for given groupid/artifactId

+0

Muszę powiedzieć, że podejście do bluszczu działało naprawdę dobrze. Skompilowane i uruchomione. http://developers-blog.org/blog/default/2010/11/08/Embed-Ivy-How-to-use-Ivy-with-Java była doskonała. Dzięki, pójdę z tym –

+0

Nie zapomnij oznaczyć tego jako odpowiedzi, jeśli to było twoje rozwiązanie – Noremac

Powiązane problemy