我一直在使用以下名为 City
@ToString
@AllArgsConstructor
public class City {
Integer id;
String name;
}
Run Code Online (Sandbox Code Playgroud)
并试图将其转换为一个record名为CityRecord作为
record CityRecord(Integer id, String name) {} // much cleaner!
Run Code Online (Sandbox Code Playgroud)
但是转向这样的表示,我们的单元测试之一开始失败。这些测试在内部处理从 JSON 文件中读取的城市列表,并映射到一个对象,进一步计算城市,同时将它们分组到Map. 简化为类似:
List<City> cities = List.of(
new City(1, "one"),
new City(2, "two"),
new City(3, "three"),
new City(2, "two"));
Map<City, Long> cityListMap = cities.stream()
.collect(Collectors.groupingBy(Function.identity(),
Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)
上面的代码断言 true 包含 4 个键,每个键占其出现的 1 个。对于记录表示,结果中的键不超过 3 个Map。是什么导致了这种情况,应该有什么方法来解决这个问题?
我正在尝试使用 Java 14 安装 netbeans。
我收到以下错误 -
> sudo ./Apache-NetBeans-11.3-bin-linux-x64.sh --javahome /home/raj/.sdkman/candidates/java/current
Configuring the installer...
Searching for JVM on the system...
Unsupported JVM version at /home/raj/.sdkman/candidates/java/current.
Try to specify another JVM location using parameter --javahome
Run Code Online (Sandbox Code Playgroud)
以下是我的 Java 详细信息 -
> which java
/home/raj/.sdkman/candidates/java/current/bin/java
> java --version
openjdk 14 2020-03-17
OpenJDK Runtime Environment (build 14+36-1461)
OpenJDK 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
我的操作系统详细信息是 -
> lsb_release -a
LSB Version: core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-x86_64:core-3.2-x86_64:core-4.0-x86_64:desktop-4.0-amd64:desktop-4.0-noarch:graphics-2.0-amd64:graphics-2.0-noarch:graphics-3.2-amd64:graphics-3.2-noarch:graphics-4.0-amd64:graphics-4.0-noarch
Distributor ID: openSUSE
Description: openSUSE Leap 15.1
Release: 15.1 …Run Code Online (Sandbox Code Playgroud) 在某些情况下,我使用 jpackage 实用程序尝试创建一个签名的 DMG 文件以交付给我的用户。我需要签署这个DMG的原因是因为我想对软件进行公证。顺便说一句,我不确定是否可以(还)使用 jpackage 进行公证,但无论如何我都在尝试。
但是,我在使用 jpackage 的内置代码签名选项时遇到了麻烦,这是成功公证的先决条件。
我正在使用这些选项运行 jpackage --mac-sign --mac-package-signing-prefix CardrDebate --mac-signing-key-user-name "Developer ID Application: ********** (*******)"(我已经编辑了实际的开发人员 ID,因为它在 StackOverflow 上是公开的)。
创建 jpackage 应用程序映像后,我通过导航到几个生成的 .dylib 文件并尝试测试了生成的代码是否实际签名codesign -vvv {filename}.dylib,并且 codesign 表示该对象根本没有签名(不是它签名不正确,而是它只是根本没有签名)。
因此,我认为我的问题是由于我(可能)在 macOS 上错误地使用了 jpackage 的签名选项。我应该如何使用这些?
我安装了 JDK 14 并开始使用它。
但是,使用 Gradle 6.2.2 的项目无法运行,并且每次尝试调用 Gradle Task 时都会出现以下错误:
无法初始化类 org.codehaus.groovy.runtime.InvokerHelper
其他项目,例如 maven 项目和普通的 java 项目,可以在 Java 14 上正常工作。
重现此错误的一种简单方法是创建一个新文件夹并尝试运行该init任务。
例如:
gradle init --type 基本
FAILURE:构建失败,出现异常。
出了什么问题:无法初始化类 org.codehaus.groovy.runtime.InvokerHelper
尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。
在https://help.gradle.org获取更多帮助
在 878 毫秒内构建失败
运行本例的PC使用windows 10。java版本为:
java --version
java 14 2020-03-17 Java(TM) SE 运行时环境(构建 14+36-1461)
Java HotSpot(TM) 64 位服务器 VM(构建 14+36-1461,混合模式,共享)
是否有解决此问题的方法,以便我可以使 Gradle 6.2.2 与 Oracle JDK 14 一起使用?
我希望 Java 14 记录实际上比类似的数据类使用更少的内存。
他们或内存使用相同吗?
在 jlink:ed 应用程序中使用记录(预览功能 java-14),在使用选项时会出现以下错误:
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
java.lang.ClassFormatError: Invalid constant pool index 11 for name in Record attribute in class file
myproj/MyClass$MyRecord
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
Run Code Online (Sandbox Code Playgroud) 希望records在gradle构建中使用Java 14 ,但我得到:
thufir@dur:~/NetBeansProjects/FileWatcherHandler$
thufir@dur:~/NetBeansProjects/FileWatcherHandler$ gradle clean build
> Task :compileJava FAILED
/home/thufir/NetBeansProjects/FileWatcherHandler/src/main/java/net/bounceme/dur/files/FXOrder.java:3: error: records are a preview feature and are disabled by default.
public record FXOrder(int units) {}
^
(use --enable-preview to enable records)
1 error
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info …Run Code Online (Sandbox Code Playgroud) 我正在用 Java 14 构建一些东西。
我写了一个名为 PersonInJava14 的类,如下所示。
package recordexample;
public record PersonInJava14(String name, String gender, int age) {}
Run Code Online (Sandbox Code Playgroud)
但是,它会引发这样的错误。
Syntax error on token "record", record expected
Run Code Online (Sandbox Code Playgroud)
该项目基于 Java 14,可以进行必要的设置以在 Java 14 中运行它。
这是我的设置部分。
我该如何解决?
在我的 Java 应用程序中,一个重要的小功能是能够根据音频文件的元数据(例如专辑/艺术家 -title)重命名音频文件,并且使用Javascript指定掩码,这使得重命名功能非常灵活和强大。
我知道 Javascript 已被弃用,但现在看来它实际上将从 Java 15 中删除。这种功能的丢失对我来说可能是一个主要问题,所以我问,即使它被正式删除,我是否可以继续在 Java 15 应用程序中使用 Javascript,即它是否可以作为 opensrc 插件使用,我可以在我自己的风险。开发在 Ecmascript 5.1 停止的事实对我来说不是一个主要问题。
有人提到使用GraalVM,但没有解释如何执行此操作,我认为这不适合我的场景,特别是我的应用程序可用于某些 32 位Arm环境,而 GraalVM 不可用于 32 位。
我已经从 Java 11 转移到 Java 14 以解决其他一些问题,所以我不能真正回到 Java 11,而且由于 Java 14 不是LTS版本,我不能真正坚持使用 Java 14 很长一段时间。
这是我的大部分 Javascript 代码
try
{
mask = includeUserDefinedFunctions(mask);
ScriptEngine engine = manager.getEngineByName("JavaScript");
for(SongFieldName next:SongFieldName.values())
{
if(next.getScriptVar()!=null && next.getSongFieldKey()!=null)
{
engine.put(next.getScriptVar(), cleanValue(song.getFieldValueSpaceSeparatedOrEmptyString(next.getSongFieldKey()), song));
}
}
String result = (String)engine.eval(mask);
return result;
} …Run Code Online (Sandbox Code Playgroud) 我能在 JAVA-HOME/lib 中找到的唯一 jar文件是一个名为jrt-fs.jar的文件,它的大小只有 105 KB。
那么运行时(引导程序)类在哪里呢?