2011-06-17 14 views
12

mam następujący wpis POMJak uzyskać maven pobrać platform.jar z projektu JNA

<dependency> 
    <groupId>net.java.dev.jna</groupId> 
    <artifactId>jna</artifactId> 
    <version>3.3.0</version> 
</dependency> 

gdy budować mojego projektu pobiera następujące pliki:

  • jna- 3.3.0.jar
  • jna-3.3.0.jar.sha1
  • jna-3.3.0.pom
  • jna-3.3.0.jar.sha1

Jeśli odwiedzasz repozytorium pod numerem http://download.java.net/maven/2/net/java/dev/jna/jna/3.3.0/, możesz zobaczyć wiele innych plików. Dlaczego Maven nie pobiera innych plików?

Jeśli otworzysz jna-3.3.0.pom widać

<plugins> 
    <!-- fake out maven and install the binary artifact --> 
    <plugin> 
    <groupId>org.jvnet.maven-antrun-extended-plugin</groupId> 
    <artifactId>maven-antrun-extended-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     <configuration> 
      <tasks> 
      <!--<ant dir="." target="dist" />--> 
      <attachArtifact file="dist/jna.jar" /> 
      <attachArtifact file="dist/platform.jar" classifier="platform" type="jar" /> 
      <attachArtifact file="dist/src-mvn.zip" classifier="sources" type="jar"/> 
      </tasks> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

Podejrzewam, że problem ma coś wspólnego z komentarzem w pom „fake z maven i zainstalować artefaktu binarnego”.

Odpowiedz

17

Jeśli dodasz drugą zależność do projektu wraz z istniejącą zależnością JNA, z dodanym klasyfikatorem, musisz dodać artefakt do swojej kompilacji.

<dependency> 
    <groupId>net.java.dev.jna</groupId> 
    <artifactId>jna</artifactId> 
    <version>3.3.0</version> 
    <classifier>platform</classifier> 
</dependency> 

Jak masz teraz dwa artefakty z tego samego projektu, byłoby rozsądne, aby wyodrębnić element do nieruchomości poziomie projektu version tak że uaktualnianie aktualizuje zarówno:

<properties> 
    <jna.version>3.3.0</jna.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>net.java.dev.jna</groupId> 
     <artifactId>jna</artifactId> 
     <version>${jna.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>net.java.dev.jna</groupId> 
     <artifactId>jna</artifactId> 
     <version>${jna.version}</version> 
     <classifier>platform</classifier> 
    </dependency> 
</dependencies> 
+1

W przypadku nowszych wersji nie jest to już prawdą, drugi artefakt nazywa się teraz "platformą jnową", bez klasyfikatora. – David

0

Pobrałem pliki i umieścił w folderze lib w katalogu głównym projektu. Szwy działają dobrze dla mnie. Musisz zaktualizować instrukcję, jeśli wydana zostanie nowa wersja.

<properties> 
    <jna.version>3.4.0</jna.version> 
</properties> 

<dependencies> 
    <dependency> 
    <groupId>net.java.dev.jna</groupId> 
    <artifactId>jna</artifactId> 
    <version>${jna.version}</version> 
    <scope>system</scope> 
    <systemPath>${project.basedir}/lib/jna.jar</systemPath> 
</dependency> 
<dependency> 
    <groupId>net.java.dev.jna</groupId> 
    <artifactId>jna</artifactId> 
    <version>${jna.version}</version> 
    <scope>system</scope> 
    <systemPath>${project.basedir}/lib/platform.jar</systemPath> 
    <classifier>platform</classifier> 
</dependency> 
</dependencies> 
6

tak naprawdę nie rozumieją zastosowanie w @steve_barham's answerclassifier.

Szukałem projektu jna w github i znaleźć plik o nazwie pom-jna-platform.xml, który zawiera następujące dane artefaktów:

<groupId>net.java.dev.jna</groupId> 
<artifactId>jna-platform</artifactId> 
<version>4.0.0-SNAPSHOT</version> 
<packaging>jar</packaging> 

Więc po prostu stosuje się następującą za pobranie obu słoików jna i jna-Platforma:

<properties> 
    <jna.version>4.0.0</jna.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>net.java.dev.jna</groupId> 
     <artifactId>jna</artifactId> 
     <version>${jna.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>net.java.dev.jna</groupId> 
     <artifactId>jna-platform</artifactId> 
     <version>${jna.version}</version> 
    </dependency> 
</dependencies> 
+4

+1 Artefakt "platforma" zmieniła się na 'jna-platform' dla wersji 4.0.0. Po prostu coś, o czym ludzie powinni wiedzieć. –