gpt4 book ai didi

java - Maven 包括 JavaFX 对我当前运行的操作系统的依赖,即使我对其他操作系统进行分类

转载 作者:行者123 更新时间:2023-12-04 01:02:01 37 4
gpt4 key购买 nike

我正在尝试仅包含适用于 mac OS 的 JavaFX 依赖项,但仍会下载 win。 linux deps 也是如此。
pom.xml:

<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>11.0.2</version>
<classifier>linux</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
<classifier>linux</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11.0.2</version>
<classifier>linux</classifier>
</dependency>
Maven 部门:
deps
pom.xml:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>11.0.2</version>
<classifier>mac</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
<classifier>mac</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11.0.2</version>
<classifier>mac</classifier>
</dependency>
Maven 部门:
deps
如何删除 win JavaFX 库或让 Maven 不下载它们?
当我使用 Ubuntu (Linux) 时也会发生同样的事情。当我分类时,我想要 mac 库,也会下载 linux 库等。
也许值得注意的是,我在 Windows 和 Ubuntu 上都使用 Eclipse IDE 2021-03。

最佳答案

当您通过来自 Maven Central 的 Maven Artifact 使用 JavaFX 时,您通常会添加到您的 pom:

    <dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>16</version>
</dependency>
</dependencies>
它只适用于您的平台,无需分类器。
现在,如果您检查依赖项,例如您在 Linux 上,您会发现:
$ mvn dependency:tree

[INFO] org.openjfx:javafx-controls:jar:16:compile
[INFO] +- org.openjfx:javafx-controls:jar:linux:16:compile
[INFO] \- org.openjfx:javafx-graphics:jar:16:compile
[INFO] +- org.openjfx:javafx-graphics:jar:linux:16:compile
[INFO] \- org.openjfx:javafx-base:jar:16:compile
[INFO] \- org.openjfx:javafx-base:jar:linux:16:compile
如果您使用的是 Windows 或 Mac OS,则相同。
你猜怎么着 javafx-controls获取遍历依赖项:通过它的 pom.但是它是如何得到分类器的呢?
让我们检查 pom :
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>16</version>
<parent>
<groupId>org.openjfx</groupId>
<artifactId>javafx</artifactId>
<version>16</version>
</parent>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>16</version>
<classifier>${javafx.platform}</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>16</version>
</dependency>
</dependencies>
</project>
如您所见,已经应用了一个基于 ${javafx.platform} 的分类器。 maven 属性(property)。
该属性通过父 pom 解析:
    <parent>
<groupId>org.openjfx</groupId>
<artifactId>javafx</artifactId>
<version>16</version>
</parent>
如果你检查它的 content :
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>org.openjfx</groupId>
<artifactId>javafx</artifactId>
<version>16</version>
<packaging>pom</packaging>
<name>openjfx</name>
<description>OpenJFX JavaFX</description>
<url>https://openjdk.java.net/projects/openjfx/</url>
<properties>
<javafx.version>16</javafx.version>
</properties>
<dependencyManagement></dependencyManagement>
<profiles>
<profile>
<id>linux</id>
<activation>
<os>
<name>linux</name>
</os>
</activation>
<properties>
<javafx.platform>linux</javafx.platform>
</properties>
</profile>
// windows profile
// mac profile
...
这意味着有一个配置文件根据您当前的平台激活,并自动设置属性 ${javafx.platform} ,进而设置您的依赖项分类器。
那么如果您向 JavaFX 依赖项添加不同的分类器(例如您在 Linux 上)会发生什么:
    <dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>16</version>
<classifier>win</classifier>
</dependency>
</dependencies>
你会得到:
$ mvn dependency:tree

[INFO] \- org.openjfx:javafx-controls:jar:win:16:compile
[INFO] +- org.openjfx:javafx-controls:jar:linux:16:compile
[INFO] \- org.openjfx:javafx-graphics:jar:16:compile
[INFO] +- org.openjfx:javafx-graphics:jar:linux:16:compile
[INFO] \- org.openjfx:javafx-base:jar:16:compile
[INFO] \- org.openjfx:javafx-base:jar:linux:16:compile
依赖是对的,先拿到win版本,然后自己的pom对 javafx-controls:${javafx.platform}有依赖,这是根据您的平台(即 Linux)解决的,这解释了为什么您也会获得平台 Artifact 。
我不知道如何避免这种情况,因为您无法在依赖项的 pom.xml 中禁用配置文件激活。
编辑
如果您继续阅读 javafx 父 pom,则有此配置文件:
<profile>
<id>javafx.platform.custom</id>
<activation>
<property>
<name>javafx.platform</name>
</property>
</activation>
<properties>
<javafx.platform>${javafx.platform}</javafx.platform>
</properties>
</profile>
这是一个配置文件,如果 javafx.platform 被激活已设置,它会覆盖 ${javafx.platform} 值的先前值。
所以我刚刚在 Linux 上尝试过(没有向依赖项添加任何分类器):
$ mvn -Djavafx.platform=win dependency:tree

[INFO] com.gluonhq.samples:hellopi:jar:1.0.0-SNAPSHOT
[INFO] \- org.openjfx:javafx-controls:jar:16:compile
[INFO] +- org.openjfx:javafx-controls:jar:win:16:compile
[INFO] \- org.openjfx:javafx-graphics:jar:16:compile
[INFO] +- org.openjfx:javafx-graphics:jar:win:16:compile
[INFO] \- org.openjfx:javafx-base:jar:16:compile
[INFO] \- org.openjfx:javafx-base:jar:win:16:compile
这有效,不再有平台分类器。
尽管如此,您的 IDE 可能会显示平台依赖项,但只要您使用该属性(如 mvn -Djavafx.platform=win javafx:run )运行就可以。

关于java - Maven 包括 JavaFX 对我当前运行的操作系统的依赖,即使我对其他操作系统进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68000364/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com