Как получить maven для загрузки платформы .jar из проекта JNA
У меня есть следующая запись POM
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>3.3.0</version>
</dependency>
Когда я создаю проект, он загружает следующие файлы:
- jna-3.3.0.jar
- jna-3.3.0.jar.sha1
- jna-3.3.0.pom
- джна-3.3.0.jar.sha1
Если вы посетили репозиторий на http://download.java.net/maven/2/net/java/dev/jna/jna/3.3.0/, вы увидите, что есть множество других файлов. Почему Maven не загружает эти другие файлы?
Если вы откроете jna-3.3.0.pom, вы увидите
<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>
Я подозреваю, что проблема имеет какое-то отношение к комментарию в pom "fake out maven и установке бинарного артефакта".
Ответы
Ответ 1
Если вы добавите вторую зависимость к вашему проекту наряду с существующей зависимостью JNA, добавив классификатор, вы должны добавить артефакт в свою сборку.
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>3.3.0</version>
<classifier>platform</classifier>
</dependency>
Поскольку у вас теперь есть два артефакта из одного и того же проекта, было бы разумно извлечь элемент version
в свойство уровня проекта, чтобы его обновление обновлялось как:
<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>
Ответ 2
Я действительно не понял использование classifier
в ответе @steve_barham.
Я искал проект JNA в github и нашел файл под названием pom-jna-platform.xml
, который включает в себя следующие детали артефакта:
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>4.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
Поэтому я просто использовал следующее для загрузки jna и jna-platform jars:
<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>
Ответ 3
Я загрузил файлы и поместил их в папку lib в корне проекта. Швы работают для меня отлично. Вы должны обновить его вручную, если они выпустят новую версию.
<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>