- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 maven 和 openJDK 12 在 JavaFX 中构建一个小型应用程序。但是,我需要我的 .Jar 包含捆绑的 JRE,以便它可以在 Windows 操作系统上运行,而无需下载适当的 JRE。
我也在使用 launch4j-maven-plugin
我在 SOF 上尝试了几种解决方案,但没有成功。有些主题提到了 maven-shade-plugin 但它对我不起作用。我无法用它打包外部文件夹。
我当前拥有的 POM,部分完成工作:
它打包了“C:/Program.jar 内的 Files/Java/openjdk-12.0.2_windows-x64_bin/bin”文件夹但不包含“.exe”,这很糟糕。
它将POM的依赖打包在.jar内
launcher4j-maven 将其全部打包在 .exe 中
我想要的是将JRE打包到.jar中并设置launcher4J来使用它。有人会帮助我吗?我还需要它才能工作,因为 javaFX 在用户/客户端计算机中执行起来很痛苦。
JRE 必须位于 .exe 之外吗?如果是,那么我如何设置maven为我做这件事?
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>br.sky</groupId>
<artifactId>Maven-FX</artifactId>
<version>2.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>12</maven.compiler.source>
<maven.compiler.target>12</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics </artifactId>
<version>11.0.2</version>
<classifier>win</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx</artifactId>
<version>11.0.2</version>
<type>pom</type>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>**/application.properties</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/JRE</outputDirectory>
<resources>
<resource>
<directory>C:/Program Files/Java/openjdk-12.0.2_windows-x64_bin/bin</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.3</version>
<configuration>
<mainClass>br.sky.main.Main</mainClass>
<executable>C:\Program Files\Java\openjdk-12.0.2_windows-x64_bin\bin\java.exe</executable>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>br.sky.main.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>exe</nonFilteredFileExtension>
<nonFilteredFileExtension>dll</nonFilteredFileExtension>
</nonFilteredFileExtensions>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>br.sky.main.Main</mainClass>
</manifest>
</archive>
<fileSet>
<directory>${basedir}/target/JRE</directory>
<outputDirectory>/jre/</outputDirectory>
<includes>
<include>/jre</include>
</includes>
</fileSet>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.akathist.maven.plugins.launch4j</groupId>
<artifactId>launch4j-maven-plugin</artifactId>
<version>1.7.25</version>
<executions>
<execution>
<id>l4j-clui</id>
<phase>package</phase>
<goals>
<goal>launch4j</goal>
</goals>
<configuration>
<headerType>gui</headerType>
<outfile>${project.build.directory}/${project.artifactId}-${project.version}.exe</outfile>
<jar>${project.build.directory}/${project.artifactId}-${project.version}-jar-with-dependencies.jar</jar>
<errTitle>Maven FX</errTitle>
<classPath>
<mainClass>br.sky.main.Main</mainClass>
<addDependencies>true</addDependencies>
</classPath>
<jre>
<path>./jre</path>
<minVersion>11.0.1</minVersion>
</jre>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
相关 SOF 主题:
How to get the JRE to bundle with launch4j?
Bundle a JRE into an exe using Launch4J
https://openjfx.io/openjfx-docs/#install-javafx
https://github.com/lukaszlenart/launch4j-maven-plugin/blob/master/src/main/resources/README.adoc
最佳答案
该内容在 30 天内被观看了 108 次。因此,我将发布我找到并且当前正在使用的解决方案。
我按照用户“José Pereda”的解决方案 https://stackoverflow.com/a/54065502/2280645
使用 OpenJFX 和 https://github.com/beryx/badass-runtime-plugin
但是,在这个答案中,我展示了一些对我来说不太清楚的选项,我敢打赌对于从 JavaFX 开始的学生或开发人员来说也不清楚:
在 javaFX{} 中添加了模块:modules = ['javafx.controls','javafx.graphics', 'javafx.fxml'] 避免jPackage 完成创建时出现编译错误和失败设置。
设置变量jpackageHome = 'C:/Program Files/Java/openjdk-14-jpackage+1-49_windows-x64_bin/' 以指出 jPackage 的位置。当您使用另一个 JDK 作为其他项目或 IDE 本身的主要构建时,这非常有用。这就是我的情况。
imageOptions = ['--icon', 'src/main/resources/images/logo.ico'] 正确设置图标。我不知道 Windows 需要 .ico 而不是 .png
compileJava.options.encoding 因为由于我使用拉丁符号,所以它破坏了我的几个文件。
我希望这些技巧以及 Jose pereda 的回答能够节省其他迷失或刚接触 JavaFx 的人的时间。
<小时/>plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.8'
id 'org.beryx.runtime' version '1.7.0'
id "com.github.johnrengelman.shadow" version "5.1.0"
}
repositories {
mavenCentral()
}
ext {
openJfxVersion = '13'
}
dependencies {
compile 'org.openjfx:javafx-base:${openJfxVersion}:win'
compile 'org.openjfx:javafx-controls:${openJfxVersion}:win'
compile 'org.openjfx:javafx-graphics:${openJfxVersion}:win'
compile 'org.openjfx:javafx-fxml:13'
}
javafx {
version = "13"
modules = [ 'javafx.controls','javafx.graphics', 'javafx.fxml' ]
}
mainClassName = 'Main'
runtime {
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
jpackage {
jpackageHome = 'C:/Program Files/Java/openjdk-14-jpackage+1-49_windows-x64_bin/'
if(org.gradle.internal.os.OperatingSystem.current().windows) {
installerType = 'msi'
imageOptions = ['--icon', 'src/main/resources/images/logo.ico']
installerOptions = ['--win-per-user-install',
'--win-dir-chooser',
'--win-menu',
'--win-shortcut',
'--verbose',
'--description','x ',
'--name', 'x',
'--vendor','x',
'--win-upgrade-uuid','x']
}
}
}
compileJava {
compileJava.options.encoding = 'ISO-8859-1'
doFirst {
options.compilerArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls,javafx.fxml'
]
}
}
run {
doFirst {
jvmArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls,javafx.fxml'
]
}
}
group = 'br.x'
version = '0.1'
tasks.withType(JavaCompile) {
options.encoding = 'ISO-8859-1'
}
<小时/>
关于java - Maven、JavaFX、Launch4J-Maven-plugin - 如何捆绑 JRE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57613874/
在C语言中,当有变量(假设都是int)i小于j时,我们可以用等式 i^=j^=i^=j 交换两个变量的值。例如,令int i = 3,j = 5;在计算 i^=j^=i^=j 之后,我有 i = 5,
我为以下问题编写了以下代码: 给定一个由 N 个正整数组成的序列 A,编写一个程序来查找满足 i > A[j]A[i](A[i] 的 A[j] 次方 > A[j] 的 A[i] 次方)。 我的代码通过
这个表达式是从左到右解析的吗?我试图解释解析的结果,但最后的结果是错误的。 int j=10, k=10; j+=j-=j*=j; //j=j+(j-=j*=j)=j+(j-j*j) k+=k*=
给定一个整数数组 A ,我试图找出在给定位置 j ,A[j] 从每个 i=0 到 i=j 在 A 中出现了多少次。我设计了一个如下所示的解决方案 map CF[400005]; for(int i=0
你能帮我算法吗: 给定 2 个相同大小的数组 a[]和 b[]具有大于或等于 1 的整数。 查找不相等的索引 i和 j ( i != j ) 使得值 -max(a[i]*b[i] + a[i] * b
每次用J的M.副词,性能显着下降。因为我怀疑艾弗森和许比我聪明得多,我一定是做错了什么。 考虑 Collatz conjecture .这里似乎有各种各样的内存机会,但不管我放在哪里M. ,性能太差了
假设一个包含各种类型的盒装矩阵: matrix =: ('abc';'defgh';23),:('foo';'bar';45) matrix +---+-----+--+|abc|defgh|23|+
是否有可能对于两个正整数 i 和 j,(-i)/j 不等于 -(i/j)?我不知道这是否可能......我认为这将是关于位的东西,或者 char 类型的溢出或其他东西,但我找不到它。有什么想法吗? 最
假设两个不同大小的数组: N0 =: i. 50 N1 =: i. 500 应该有一种方法可以获得唯一的对,只需将两者结合起来即可。我发现的“最简单”是: ]$R =: |:,"2 |: (,.N0)
我是 J 的新用户,我只是想知道 J 包中是否实现了三次样条插值方法? 最佳答案 我自己不熟悉,但是我确实安装了所有的包,所以 $ rg -l -i spline /usr/share/j/9.02
在 Q/kdb 中,您可以使用 ': 轻松修改动词,它代表每个优先级。它会将动词应用于一个元素及其之前的邻居。例如 =': 检查值对是否相等。在 J 中,您可以轻松折叠 /\ 但它是累积的,是否有成对
嗨,我有一个 4x4 双矩阵 A 1+2i 2-1i -3-2i -1+4i 3-1i -3+2i 1-3i -1-3i 4+3i 3+5i 1-2i -1-4i
刚刚发现 J 语言,我输入: 1+^o.*0j1 I expected the answer to be 0 ,但我得到了 0j1.22465e_16。虽然这非常接近于 0,但我想知道为什么 J 应该
这个问题在这里已经有了答案: With arrays, why is it the case that a[5] == 5[a]? (20 个答案) 关闭 3 年前。 我正在阅读“C++ 编程语言”
当第一行是 1, 1/2 , 1/3 ....这是支持该问题的图像。 是否存在比朴素的 O(n^2) 方法更有效的方法? 我在研究伯努利数时遇到了这个问题,然后在研究“Akiyama-Tanigawa
我写了一段Java代码,它在无限循环中运行。 下面是代码: public class TestProgram { public static void main(String[] args){
for (int i = n; i > 0; i /= 2) { for (int j = 0; j 0; i /= 2) 的第一个循环结果 O(log N) . 第二个循环for (int
如问题中所述,需要找到数组中 (i,j) 对的总数,使得 (1) **ia[j]** 其中 i 和 j 是数组的索引。没有空间限制。 我的问题是 1) Is there any approach w
for l in range(1,len(S)-1): for i in range(1,len(S)-l): j=i+l for X in N:
第二个for循环的复杂度是多少?会是n-i吗?根据我的理解,第一个 for 循环将执行 n 次,但第二个 for 循环中的索引设置为 i。 //where n is the number elemen
我是一名优秀的程序员,十分优秀!