我一直试图找出将 OpenJDK Java 运行时作为我的 Fedora 机器的默认 Java 运行的最佳方法,并使用 Oracle JDK 6 进行 Android 开发,即从 Android Bundle 运行 Android SDK Manager、Android Studio 和 Eclipse。
我从 Fedora 存储库安装了 OpenJDK Java Runtime,它具有如下设置替代方案。
[donnie@fedora ~]$ alternatives --list | grep java
jre_openjdk auto /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre
jre_1.7.0 auto /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre
java auto /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre/bin/java
libjavaplugin.so.x86_64 auto /usr/lib64/IcedTeaPlugin.so
Run Code Online (Sandbox Code Playgroud)
我已经使用 Oracle 提供的 rpm 安装了 Oracle JDK 6。
我可以通过在.bashrc.
export JAVA_HOME=/usr/java/jdk1.6.0_45/
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
我注意到 Chrome 仍然使用 OpenJDK(因为我仍然需要链接插件)。
JAVA_HOME 和使用替代品有什么区别?
我有一个 bash 脚本(从 Java 程序调用),它不断被杀死。我总是赶上signal 15,trap但随后出现了一些我怀疑是的其他信号,signal 9但对于它是否真的是一无所知signal 9。
我知道你不能trap signal 9,那么有没有其他方法可以判断是否signal 9正在杀死我的 shell 脚本?
如何在 Awesome WM v3.5.2 到 3.5.5(到目前为止)中重现:
在这一点上,我希望鼠标的行为与“普通”应用程序一样。相反,我观察到以下几点:
就好像有些东西没有检测到窗口坐标发生了变化。
当您在同一标签中打开另一个应用程序时,会发生类似但更烦人的错误- 鼠标行为就好像窗口根本没有移动一样。
当您切换另一个已打开应用程序的标签时- “虚拟鼠标桌面”将移至主屏幕的左上角。
由于在 OpenJDK 和 Oracle Java 中都观察到了这些错误,在不同的 Java 应用程序中,该错误似乎很可能在 Awesome WM 中。
这个答案解释了为什么它被删除。我对原因不感兴趣,相反,我需要安装它。该虚拟机专门用于我的 Java 应用程序,因此我对使用容器并不真正感兴趣。该答案提到您可以从 Stretch 存储库中获取它,但我不想创建 Franken-Debian,所以我不确定这是否是一个好主意。我需要从 OpenJDK 安装 Java 8 JRE。我安装了 Debian 11,并由于虚拟机管理程序错误*而使用了高级安装。
这是我安装它时所做的:
$ sudo apt update
...
$ sudo apt install openjdk-8-jre
Reading package lists... Done
Building dependency tree... Done
Building state information... Done
Package openjdk-8-jre is not available, but is referenced to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another sources
However the following packages replace it:
nvidia-openjdk-8-jre
E: Package 'openjdk-8-jre' has …Run Code Online (Sandbox Code Playgroud) 我在 Java 程序(例如jabref和rubymine. 这可以通过运行来修复
_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on' jabref
Run Code Online (Sandbox Code Playgroud)
我知道我可以将这些 Java 选项导出为环境变量,并从命令行启动程序。但是,有没有办法全局设置这些选项,以便所有 Java 程序都能识别它们,无论它们如何启动?
我也知道我可以修改*.desktop我的 Java 程序的所有文件,但我正在寻找一个全局解决方案。
我java-7-openjdk在 Arch Linux 上使用。(FWIW以前安装了现在损坏的jre7-openjdk-headless-infinality 就可以了。)
我将这个定义用于systemd工作:
[Unit]
Description=Some job
[Service]
ExecStart=/usr/local/sbin/somejob
User=dlt
Type=forking
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
脚本调用如下(调用一个简单的例程,侦听 tcpip 套接字并将输入附加到文件):
#!/bin/sh
cd /home/user/tmp/testout
nohup java -jar /home/user/programming/tests/java/core/SocketTest/SocketTest.jar </dev/null >/dev/null &
Run Code Online (Sandbox Code Playgroud)
之后systemctl start somejob的过程显示为下运行,同时init作为其父:
user@CANTANDO ~$ ps -u dlt eo pid,ppid,command
PID PPID COMMAND
8718 1 java -jar /home/user/programming/tests/java/core/SocketTest/SocketTest.jar
Run Code Online (Sandbox Code Playgroud)
执行systemctl stop somejob该过程后不再显示(并且端口已关闭)。
所以一切看起来都很好
我的问题是:这是运行 java 守护进程的可接受的解决方案systemd,还是有警告,以及其他更稳定或安全的方法来实现这一目标?
仔细检查:您可以简单地从 Stretch 存储库安装 java8。几个月前,它在生产环境中运行良好。没有理由为此推迟升级。(@彼得)
Debian 的最新稳定版本 Debian Buster 不再有 Java 8。
然而,Java 8 仍然广泛用于生产环境,在任何升级之前这样做是一个巨大的后备。
任何人都更了解 Debian 邮件列表的内部结构,以及他们的交流,他们这样做的原因是什么?
有没有希望,Java 8 曾经以某种升级的形式重新出现?
当然,从不同的来源(Oracle、Ubuntu),甚至从 Stretch 包存储库安装 Java 8 是一个可行的选择。但是这样做,我们完全失去了官方回购的优势。
unistd.h我的 Ubuntu Linux 中有几个文件。我有一个/usr/include/asm/unistd.h。该文件具有以下指令:
# ifdef __i386__
# include "unistd_32.h"
# else
# include "unistd_64.h"
# endif
Run Code Online (Sandbox Code Playgroud)
在那个文件夹中,我可以找到那些文件(unistd_32.h和unistd_64.h)。
但是/usr/src/linux-headers-2.6.31-22/include/asm-generic/还有另一个unistd.h以这个指令开头:
#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL)
#define _ASM_GENERIC_UNISTD_H
Run Code Online (Sandbox Code Playgroud)
所以,问题是:我怎么知道哪个加载了?有什么方法可以在运行时使用 Java 进行检查吗?