2012-01-15 15 views
5

Jeśli do pliku JAR dołączona jest natywna biblioteka DLL w repozytorium Maven, co muszę umieścić w pliku pom.xml, aby uzyskać tę bibliotekę DLL w opakowaniu?jak odwołać się do natywnego DLL z repo Maven?

Aby być bardziej specyficznym, należy na przykład użyć biblioteki Jacob. Jak zrobić jacob-1.14.3-x64.dll przejść do folderu WEB-INF/lib po uruchomieniu mvn package?

W naszym lokalnym repozytorium Nexus mamy te definicje do słoika i DLL:

<dependency> 
    <groupId>net.sf.jacob-project</groupId> 
    <artifactId>jacob</artifactId> 
    <version>1.16-M2</version> 
</dependency> 

<dependency> 
    <groupId>net.sf.jacob-project</groupId> 
    <artifactId>jacob</artifactId> 
    <version>1.16-M2</version> 
    <classifier>x64</classifier> 
    <type>dll</type> 
</dependency> 

Jednak wprowadzenie tych samych zależności do naszego projektu POM i działa mvn package nie czyni DLL przejść do WEB-INF/lib, ale JAR dostaje się dobrze.

Co robimy źle?

+0

PS Wiem, że Jacob 1.14 jest nieaktualne - to tylko przykład –

+2

Does [to] (http://stackoverflow.com/questions/1001774/managing-dll- dependencies-with-maven) nie odpowiada na pytanie? – eis

+0

W jaki sposób biblioteka DLL jest przechowywana w repozytorium? Czy używa klasyfikatora DLL z opakowaniem POM? – Monty0018

Odpowiedz

6

Dla biblioteki DLL konieczne jest użycie Copy Dependencies MOJO.

Można odfiltrować wszystkie zależności inne niż DLL i określić dowolne miejsce w strukturze projektu, aby je skopiować, w tym docelowy/webapp/WEB-INF/lib.

+0

Świetnie, dzięki! Umieszczenie tego mojo w fazie 'prepare-package' zrobiło frajdę! –

+3

Czy możesz pokazać nam kod maven? –

+1

druga odpowiedź ma kod, przepraszam, nie zauważyłem tego komentarza w tym czasie –

8

Dzięki podpowiedzi od Monty0018 udało mi się rozwiązać problem. Kod Maven, który działa dla mnie:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>prepare-package</phase> 
      <goals> 
      <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
      <excludeTransitive>true</excludeTransitive> 
      <includeArtifactIds>jacob</includeArtifactIds> 
      <failOnMissingClassifierArtifact>true</failOnMissingClassifierArtifact> 
      <silent>false</silent> 
      <outputDirectory>target/APPNAME/WEB-INF/lib</outputDirectory> 
      <overWriteReleases>true</overWriteReleases> 
      <overWriteSnapshots>true</overWriteSnapshots> 
      <overWriteIfNewer>true</overWriteIfNewer> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 
+1

Czy możesz powiedzieć mi jedno: jak to działa twoje rozwiązanie? Czy podczas uruchamiania musisz zmodyfikować ścieżkę libararies? Musisz zrobić coś, co zmodyfikuje pom.xml? –

Powiązane problemy