我试图只包含mac OS的JavaFX依赖项,但win仍然可以下载。linux DEP也是如此。
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:
<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 Central的Maven工件使用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
让我们检查一下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属性的分类器。
该属性通过父POM:
<parent>
<groupId>org.openjfx</groupId>
<artifactId>javafx</artifactId>
<version>16</version>
</parent>
如果检查其内容:
<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)解析的,这也解释了为什么您还得到了platform工件。
我看不出如何避免这种情况,因为您不能在依赖项的POM中禁用配置文件激活。
编辑
如果您继续阅读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
)运行,该属性就应该起作用。
问题内容: 我要查看我是在Windows还是Unix等上,我需要查看什么? 问题答案: 的输出platform.system()如下: Linux: Linux Mac: Darwin Windows: Windows
操作系统提供的服务 操作系统的五大功能,分别为:作业管理、文件管理、存储管理、输入输出设备管理、进程及处理机管理 中断 所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类: 内部异常中断:由计算机硬件异常或故障引起的中断; 软中断:由程序中执行了引起中断的指令而造成
sed sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的
1、操作系统的运行机制 计算机系统中,通常CPU执行两种不同性质的程序,一种是操作系统内核程序;另一种是用户自编程序或系统外城的应用程序。对操作系统而言,这两种程序的作用不同,前者是后者的管理者和控制者,因此“管理程序”要执行一些特权指令,而“被管理程序”出于安全性考虑,不能执行这些指令。所谓特权指令,是指计算集中不允许用户直接使用的指令,如IO指令、置中断指令。 操作系统在具体实现上划分了用户态
进程与线程 对于有线程系统: 进程是资源分配的独立单位 线程是资源调度的独立单位 对于无线程系统: 进程是资源调度、分配的独立单位 进程之间的通信方式以及优缺点 管道(PIPE) 有名管道:一种半双工的通信方式,它允许无亲缘关系进程间的通信 优点:可以实现任意关系的进程间的通信 缺点: 长期存于系统中,使用不当容易出错 缓冲区有限 无名管道:一种半双工的通信方式,只能在具有亲缘关系的进程间使用(父
1 select,poll和epoll 其实所有的I/O都是轮询的方法,只不过实现的层面不同罢了. 这个问题可能有点深入了,但相信能回答出这个问题是对I/O多路复用有很好的了解了.其中tornado使用的就是epoll的. selec,poll和epoll区别总结 基本上select有3个缺点: 连接数受限 查找配对速度慢 数据由内核拷贝到用户态 poll改善了第一个缺点 epoll改了三个缺点.