如何让maven从JNA项目下载platform.jar

Pre*_*ton 12 maven-2 jna

我有以下POM条目

<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>3.3.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

当我构建我的项目时,它会下载以下文件:

  • JNA-3.3.0.jar
  • JNA-3.3.0.jar.sha1
  • JNA-3.3.0.pom
  • JNA-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>
Run Code Online (Sandbox Code Playgroud)

我怀疑这个问题与pom中的评论"假冒maven并安装二进制工件"有关.

小智 17

如果在现有JNA依赖项的同时向项目添加第二个依赖项,并添加了分类器,则应将该工件添加到构建中.

<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>3.3.0</version>
    <classifier>platform</classifier>
</dependency>
Run Code Online (Sandbox Code Playgroud)

由于您现在有两个来自同一项目的工件,因此将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>
Run Code Online (Sandbox Code Playgroud)

  • 对于较新的版本,这不再是真的,第二个工件现在被称为"jna-platform",没有分类器. (2认同)

yai*_*air 6

我真的不明白@ steve_barham的回答中classifier用法.

我在github中搜索了JNA的项目并找到了一个名为的文件pom-jna-platform.xml,其中包含以下工件详细信息:

<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>4.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
Run Code Online (Sandbox Code Playgroud)

所以我只是使用以下内容来下载jna和jna平台jar:

<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>
Run Code Online (Sandbox Code Playgroud)

  • +1对于版本4.0.0,artifactId`tlatform`已更改为`jna-platform`.只是让人们意识到的东西. (4认同)