Java

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Java and the translation is 40% complete.
Outdated translations are marked like this.

Java是一种编程语言,最初由Sun Microsystems开发,它使用一个运行时允许在各种平台上运行Java开发的应用程序。对于想要创建跨平台应用程序的开发人员来说,这是一个受欢迎的选择。

什么是 Java?

概观

Java is a programming language developed by Sun Microsystems. The language is object-oriented and designed to run on multiple platforms without the need of recompiling code for each platform. Although Java can be compiled as a native program, much of Java's popularity can be attributed to its portability, along with other features such as automatic memory management. To make platform independence possible the Java compiler compiles the Java code to an intermediate representation called Java bytecode that runs on a JVM (Java Virtual Machine) and not directly on the operating system.

In order to run Java bytecode, one needs to have a JRE (Java Runtime Environment) installed. A JRE provides core libraries, a platform dependent JVM, plugins for browsers, among other things. A JDK (Java Development Kit) adds programming tools, such as a bytecode compiler and a debugger.

JVM 语言

Java 虚拟机并不完全由 Java 语言使用。多种编程语言使用 Java 平台并在 JVM 上运行。这方面的例子包括:ClojureApache GroovyKotlinScala

安装虚拟机

选择

Gentoo提供了许多Java运行环境(JRE)和Java开发工具包(JDK)。目前的选择包括:

Vendor JDK JRE
The IcedTea Open Java SE (formerly icedtea6-bin) dev-java/icedtea and dev-java/icedtea-bin
Oracle's Java dev-java/oracle-jdk-bin dev-java/oracle-jre-bin
The GCJ IcedTea GNU GCC Java (currently IcedTea-7) dev-java/icedtea sys-devel/gcc USE="gcj"

|}

安装 JRE/JDK

安装profile的默认JDK ,请运行:

root #emerge --ask virtual/jdk

安装profile的默认JRE ,请运行:

root #emerge --ask virtual/jre
附注
请注意,每个“JDK”将包含一个“JRE”;如果已经emerge JDK,则不需要安装JRE。

Setting up a headless JRE

Sometimes there is no need for a full JRE with all the capabilities of java. Using java on a server often does not require any GUI, graphical, sound or even printer related features. To install a simplified (sometimes also referred to as headless) JRE, a few USE flags need to be changed for the selected JRE flavor.

文件 /etc/portage/package.useRequired USE flag changes
dev-java/openjdk headless-awt -alsa -cups
dev-java/openjdk-bin headless-awt -alsa -cups

Depending on the current Gentoo profile, this might already be the case. As usual, the USE flag settings that are applicable to a particular package can be checked by running emerge in pretend mode:

user $emerge --pretend --verbose virtual/jre

配置 Java 虚拟机

概观

Gentoo has the ability to have multiple JDKs and JREs installed without causing conflicts.

设置默认虚拟机

The eselect command can be used to present a list of installed Java instances (be it JRE or JDK). Here is an example of the output:

root #java-config --list-available-vms
The following VMs are available for generation-2:
*      IcedTea JDK 7.2.6.3 [icedtea-7]
*      IcedTea JDK 3.0.1 [icedtea-8]

The user-vm flag indicates the default JVM for the user. The system-vm flag indicates the default JVM for the system and the fallback if a user JVM is not set. The number in the brackets (i.e. [1]) is the reference for the particular JVM. To set the default system JVM:

root #eselect java-vm set system 1

要设置一个用户首选的 JVM:

user $eselect java-vm set user 1
附注
source-ing the profile for existing shell sessions is not usually needed when changing the user or system VM. The only exception is that variables such as JAVA_HOME will still point to the old location after setting a user VM for the first time or revert back to the system VM.

Java浏览器插件

重要
The Java plugin support had been deprecated in JDK 9[1].
附注
Note that Chromium-based browsers since version 42 and Firefox since version 52 no longer support NPAPI-based plugins[2]. This effectively disables the Java plugin on modern browsers.

For those who need a Java-enabled browser for a specific use case, there is e.g. palemoon/palemoon-bin available in the palemoon overlay, which has long-term support for NPAPI and thus Java plugins up to JDK 8[3].

使用 Java 的 USE 标记

设置 USE 标签

For more information regarding USE flags, refer to the USE flags chapter from the Gentoo Handbook.

USE 标记

Following USE flags go in JAVA_PKG_IUSE, see Gentoo Java USE flags for details and other specific USE flags of Java:

  • The source flag installs a zip of the source code of a package. This is traditionally used for IDEs to 'attach' source to the libraries that are being use;
  • For Java packages, the doc flag will build API documentation using javadoc.

Troubleshooting

Minecraft launcher errors

  • A specific error in which minecraft-launcher crashed after a few seconds, throwing "Alarm" and "SaveToBuffer failed" error was solved by setting the USE flag threads for net-misc/curl.
  • When executing minecraft-launcher the following error was produced:
user $./minecraft-launcher
[0229/184549.183275:ERROR:sandbox_linux.cc(346)] InitializeSandbox() called with multiple threads in process gpu-process.

This was solved by executing minecraft-launcher with the following option:

user $MESA_GLSL_CACHE_DISABLE=true ./minecraft-launcher

另请参阅

外部资源

更多信息可以离线查找:

  • man java-config
  • java-config --help

参考

  1. JDK 9 and the Java Plugin, java.com. Retrieved on November 30, 2018
  2. How do I enable Java in my web browser?, java.com. Retrieved on November 30, 2018
  3. Pale Moon future roadmap, palemoon.org. Retrieved on June 28, 2019

This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Joshua Nichols, Karl Trygve Kalleberg, nightmorph
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.