1.OpenJDKï¼
2.openjdk和sunjdk有啥区别?码下
3.一场因OpenJDK引发的血案
4.Oracle JDK 和 OpenJDK 有什么区别?
5.openjdkåjdkå·®å«å¤§å
6.真·手把手,从头教你编译JDK
OpenJDKï¼
openjdkä¸jdkåºå«
1ãOracleJDKåOpenJDKä¹é´çä¸äºä¸»è¦åºå«å¦ä¸ï¼åå¸å¨æOpenJavaæ¯å 个æåå¸ä¸æ¬¡ï¼èOraclejavaæ¯ä¸å¹´åå¸ä¸æ¬¡ãç¨æ·è½å¤è·å¾oracleå¯¹å ¶çæ¬çé¿ææ¯æãèOpenJDK为任ä½çæ¬æä¾æ´æ¹ï¼ç´å°ä¸ä¸ä¸ªçæ¬åå¸ã
2ãææåè®®çä¸åï¼openjdkéç¨GPLV2åè®®æ¾åºï¼èJDKåéç¨JRLæ¾åºã两è åè®®è½ç¶é½æ¯å¼æ¾æºä»£ç çï¼ä½æ¯å¨ä½¿ç¨ä¸çä¸åå¨äºGPLV2å 许å¨åä¸ä¸ä½¿ç¨ï¼èJRLåªå 许个人ç 究使ç¨ã
3ãæ¯ä¸ªé¡¹ç®ç¨å°çä¸è¥¿ä¸åï¼æ以ä¸è½ä¸æ¦è论ï¼OpenJDKä¸SunçJDKåè½é½æ¯ä¸æ ·çï¼åªæ¯çæä¿¡æ¯ä¸ä¸æ ·ãOpenJDKå ¬å¼äºJDKãJVMãJREãJavaç±»åºçæºä»£ç ï¼èSunJDKåªå ¬å¼äºJavaç±»åºçæºä»£ç ã
4ãææåè®®çä¸åï¼OpenJDKéç¨GPLV2åè®®æ¾åºï¼èSUNJDKåéç¨JRLæ¾åºã两è åè®®è½ç¶é½æ¯å¼æ¾æºä»£ç çï¼ä½æ¯å¨ä½¿ç¨ä¸çä¸åå¨äºGPLV2å 许å¨åä¸ä¸ä½¿ç¨ï¼èJRLåªå 许个人ç 究使ç¨ã
5ãopenjdkéç¨GPLV2åè®®ï¼oraclejdkéç¨JRLåè®®ã
è°è°OpenJDKä¸çº¿ç¨ç9ç§ç¶æ
1ãæ£æ¥openjdkæ¯å¦ææ´æ°ï¼å¦ææï¼å¯ä»¥å°è¯æ´æ°openjdkçæ¬ï¼ä»¥è§£å³å¯è½åå¨çbugãæ£æ¥openjdkçé ç½®ï¼å¦ææè¿å¤çé ç½®ï¼å¯ä»¥å°è¯åå°é ç½®ï¼ä»¥åå°openjdkå ç¨cpuçæ åµã
2ã对äºOpenJDKèè¨ï¼æ¯ä¸æ¯æ¯ä¸ªJava线ç¨é½å¯¹åºä¸ä¸ªæ§è¡å¼æ线ç¨è¿ä¸ªæ¹æ³å½ç¶ä¸å¯è¡ãæç»ä½ 举个ä¾åï¼ä½ å»ç«è½¦ç«ä¹°ç¥¨ãçªå£å°±è¿ä¹å¤ï¼æ人æ¥äºå°±æéï¼ä¸ä¼æ¯ä¸ªäººé½æä¸ä¸ªçªå£ã
3ã使ç¨OpenJDKæå åå¿«ç §å¯ä»¥å¸®å©æ们äºè§£ç¨åºçå å使ç¨æ åµï¼ä»¥åæ¾åºå åæ³æ¼çåå ã
openjdkæ¯ä»ä¹1ãåå²ä¸çåå æ¯ï¼openjdkæ¯jdkçå¼æ¾åå§ç çæ¬ï¼ä»¥GPLåè®®çå½¢å¼æ¾åºãå¨JDK7çæ¶åï¼openjdkå·²ç»æ为jdk7ç主干å¼åï¼sunjdk7æ¯å¨openjdk7çåºç¡ä¸åå¸çï¼å ¶å¤§é¨ååå§ç é½ç¸åï¼åªæå°é¨ååå§ç 被æ¿æ¢æã
2ãJDK表示çæ¯Oracleå ¬å¸çéæºç¨åºOpenJDKæ¯Oracleå ¬å¸çå¼æºç¨åºé½æ¯åä¸ä¸ªå ¬å¸ç产åï¼åªæ¯åè ç±ç¤¾åºå¼åè æä¾æ´æ°JDKåç±Oracleå ¬å¸æä¾æ¯æã
3ã许å¯è¯OracleJDKä¾æ®Oracleäºè¿å¶ä»£ç 许å¯å议许å¯è¯ï¼èOpenJDK使ç¨GNUéç¨å ¬å ±è®¸å¯è¯(GNUGPL)第2çï¼ä½æä¸ä¸ªé¾æ¥ä¾å¤ã
4ãgcjæ¯ä¸ä¸ªç¼è¯å¨ï¼ç¨æ¥æjava代ç ç¼è¯æåèç çãgijæ¯ä¸ä¸ªè§£éå¨ï¼ç¨æ¥æåèç 解éææºå¨ç çã
5ãä»åé¢ä»ç»çJavaåå±å²ä¸æ们äºè§£å°OpenJDKæ¯Sunå¨å¹´æ«æJavaå¼æºèå½¢æç项ç®ï¼è¿éçâå¼æºâæ¯é常æä¹ä¸çæºç å¼æ¾å½¢å¼ï¼å³æºç æ¯å¯è¢«å¤ç¨çï¼ä¾å¦IcedTeaãUltraVioleté½æ¯ä»OpenJDKæºç è¡çåºçåè¡çã
使ç¨openjdkéå°çé®é¢1ãTomcatæå¡åºç°ä¸è½æ£å¸¸å¯å¨çé®é¢ï¼åºç¬¬ä¸æ¶é´æ¥çTomcatlogsæ件夹ä¸ï¼å½å¤©ä»¥âcammons-daemonâå¼å¤´çæ¥å¿æ件è¿è¡ææ¥ã
2ãä½ å¥½ï¼è¯¥é®é¢æ åµæ¯Microsoft.NETFrameworkåå§åé误ãMinecraftæ¬èº«ç¨çæ¯JAVAï¼ä½ç½æçå¯å¨å¨è¦ç¨å°.NETã
3ãå¯è½æ¯å ç¨å åãcpuè¿é«ï¼å¯¼è´æ æ³å·¥ä½äºï¼æè æ¯æ¾å¡é©±å¨é®é¢ã解å³åæ³æ¯æ´æ°æ¾å¡é©±å¨ææ¢ä¸ä¸ªæ¾å¡é©±å¨çæ¬ã
openjdkå个åè¡çå¸åºä»½é¢1ãæä½³æ¡é¢åè¡çï¼ElementaryOSElementaryOSLokiä¸ä» é常ç¾è§ï¼ä¸ç¨³å®æ§åºè²å¹¶æä¾æ ä¸ä¼¦æ¯çç¨æ·å好æ§åä¸è´æ§ãè½ç¶å¸¦æé¨å主è§å ç´ ï¼ä½æ认为ElementaryOSLokiå¿ ç¶è½å¤å¨å¹´å å»è´¥LinuxMintæ为æä½³æ¡é¢åè¡çã
2ãå¹´ï¼BobYoungæç«äºACCå ¬å¸ï¼è¿æ¯ä¸å®¶é®è´å ¬å¸ï¼ä¸»è¦ä¸å¡æ¯åºå®LinuxåUnixç软件é件ã
3ãOpenJDKä¸ç代ç åºæ¬ä¸é½æ¥èªäºOracleJDKï¼å±äºOracleJDKçä¸ä¸ªåæ¯ï¼ä½æ¯å ¶ä¸å»é¤äºä¸äºéå¼æºçç»ä»¶å代ç ï¼æ¿æ¢æäºå¼æºçç»ä»¶å代ç ï¼ä¸»è¦æ¯å å¯åå¾å½¢çé¨åãå æ¤ç¨OpenJDK代æ¿OracleJDKå¯è½ä¼æä¸äºçä¸å ¼å®¹ã
4ãèPHPãJavaåä¸åï¼å®ä»¬é½æ¯è·¨å¹³å°å¼æºå è´¹çï¼è½ç¶Javaå¼å§æ¶è´¹äº(ä½è¿æå è´¹çOpenJDK)ï¼æ以PHPãJavaè¿æ¯é¦éãæèªå·±å½åå¦è¿.netï¼javaï¼ç°å¨ç®æ¯ç¥æäºè§£ã
openjdkå cpué«æä¹å¤ç1ãopenjdkplatformbinaryå ç¨CPUè¾é«å¯è½æ¯å ä¸ºä½ ççµèç³»ç»ä¸æå¤ä¸ªJavaç¨åºå¨è¿è¡ï¼æè ä½ ççµèç³»ç»ä¸çJavaç¨åºè¿è¡æ¶é´è¿é¿ï¼å¯ä»¥å°è¯å ³éä¸äºä¸å¿ è¦çJavaç¨åºï¼æè éå¯çµèï¼ä»¥éæ¾CPUèµæºã
2ãå é¤å¤ä½MODï¼å é¤å¤ä½çMODå¯ä»¥éä½å åå ç¨ï¼å¢å 空é²å åã使ç¨ä¼åMODï¼ç¨ä¼åMODï¼æ¥ä¼åå åå ç¨ï¼éä½æ ç¨å åçå ç¨ã
3ãå¯è½æ¯å ç¨å åãcpuè¿é«ï¼å¯¼è´æ æ³å·¥ä½äºï¼æè æ¯æ¾å¡é©±å¨é®é¢ã解å³åæ³æ¯æ´æ°æ¾å¡é©±å¨ææ¢ä¸ä¸ªæ¾å¡é©±å¨çæ¬ã
4ã以ä¸æ¯å¨JDK8ä¸çThreadæºç ä¸å¤æ³¨çã
5ãMicrosoftBuildofOpenJDKæ¯ç±å¾®è½¯å®æ¹åå¸çOpenJDKå®ç°ï¼æä¾ä¸ä¸ªçº¯çº¿ç¨å®å ¨ã解å³äºå®å ¨æ¼æ´åé误çJavaå¼ååè¿è¡ç¯å¢ã
6ãé¦å è¦å æç¡®ä¹é´ï¼ä»¥åOpenJDKOpenJDKOpenJDK7uåOpenJDK8ç项ç®ä¹é´æ¯ä»ä¹å ³ç³»ï¼è¿æå©äºç¡®å®æ¥ä¸æ¥ç¼è¯è¦ä½¿ç¨çJDKçæ¬åæºç åæ¯ã
openjdk和sunjdk有啥区别?码下
了解
使用Linux系统的人通常会遇到内置或通过软件源安装的JDK是OpenJDK的情况。那么,码下OpenJDK是码下什么?它与SUN JDK有什么区别?历史背景是,OpenJDK是码下JDK的开源版本,以GPL协议(通用公共许可证)形式发布。码下美元微盘源码在JDK7时期,码下OpenJDK作为其主要开发版本,码下而SUN JDK7是码下在OpenJDK7基础上发布的,两者在大部分代码上相同,码下仅在少量代码上有所替换。码下SUN JDK则采用JRL(Java研究授权协议)发布。码下
授权协议的码下不同是关键点。OpenJDK遵循GPL V2,码下允许商业使用,码下而SUN JDK则为个人研究使用。OpenJDK不包含部署功能,如浏览器插件、Java Web Start和Java控制面板。此外,源码的用法OpenJDK的源代码存在不完整性,因为某些代码由于版权问题无法开放。这部分代码通常被替换为功能类似的开源代码,比如字体栅格化引擎使用Free Type代替。OpenJDK更精简,仅包含基础JDK,不包括其他软件包,如Rhino、Java DB、JAXP等。在OpenJDK中,无法使用Java商标。
总的来说,OpenJDK和SUN JDK之间主要区别在于授权协议、功能完整性、源代码的可用性和商标使用。希望未来Oracle能够更开放地参与JCP(Java社区过程),实现Java生态系统的自由发展。
一场因OpenJDK引发的正义枪战源码血案
在进行项目开发时,遇到了一个令人头疼的问题。在本地调试一切正常,但将项目部署到服务器上时,却遇到了编译失败的情况。问题出在缺少一个名为javafx.util的库。经过排查,发现原因在于服务器上使用的JDK版本是OpenJDK,而非本地开发环境中的Oracle JDK。
OpenJDK是一个开源版本的JDK,其与Oracle JDK在功能上存在一定的差异。从历史来看,OpenJDK在JDK 7时期已成为JDK 7的主干开发,而在JDK 7的发布中,OpenJDK与Oracle JDK的大部分原始代码相同,只有少量部分有所区别。这种差异主要体现在一些商业功能的实现上,例如Oracle JDK中包含了Flight Recorder和Java Mission Control等功能,而OpenJDK则使用了开源的FreeType作为字体渲染器。
由于OpenJDK是农庄系统源码一个开源项目,开发者可以自行克隆其源代码或下载源码包进行编译,从而生成定制化的JDK版本。基于OpenJDK的源码,还诞生了许多其他版本的JDK,如IcedTea、UltraViolet等。因此,服务器上使用的OpenJDK版本可能缺少某些特定的库,如javafx.util。
要解决这个问题,可以通过以下几种方式:
1. 确保在服务器上安装了包含javafx.util库的JDK版本,或者通过下载该库的jar包,并将其添加到项目中。
2. 将本地编译好的项目部署到服务器上,并确保服务器上的JDK版本兼容。
3. 考虑使用Oracle JDK作为服务器上的JDK版本,因为Oracle JDK在商业许可下提供稳定的更新和支持。
4. 在本地编译项目时,使用jar包部署项目,经纬指标源码以避免与服务器上JDK版本的兼容性问题。
通过上述方法,可以解决因使用OpenJDK导致的编译错误问题,并确保项目在不同环境下的顺利运行。在选择JDK版本时,考虑到项目需求、稳定性以及社区支持等因素,选择合适的JDK版本至关重要。
Oracle JDK 和 OpenJDK 有什么区别?
OpenJDK与Oracle JDK之间的主要区别在于授权协议、代码包、源代码完整性以及对Java商标的使用。
OpenJDK基于Java的开源版本,遵循GPL V2协议发布,提供一个精简的JDK版本,不包含其他软件包如Rhino、Java DB、JAXP等。虽然源代码不完整,但由于采用了GPL协议,部分无法开放的源代码会以插件形式提供,用户可以自行选择是否使用。IcedTea项目最初创立,旨在为OpenJDK提供一个完整的开源工具链及代码库。
Oracle JDK采用JRL协议发布,包含更丰富的功能,如Java Flight Recorder和MissionControl。在代码层面,OpenJDK 7和Oracle JDK 7程序上非常接近,共用大量相同的代码。
在Linux发行版本中,内置或通过软件源安装的JDK通常为OpenJDK版本。由于授权协议的不同,OpenJDK和Oracle JDK在商业使用上有区别,Oracle JDK允许商业使用,而OpenJDK在商业上受到一定限制。
总结来说,OpenJDK提供一个开源、精简的JDK版本,通过插件形式提供缺失的部分功能,并遵循更开放的授权协议。而Oracle JDK则提供一个功能更丰富的版本,允许商业使用,但代码库中可能包含一些闭源或限制使用的部分。
openjdkåjdkå·®å«å¤§å
使ç¨è¿LINUXç人é½åºè¯¥ç¥éï¼å¨å¤§å¤æ°LINUXåè¡çæ¬éï¼å ç½®æè éè¿è½¯ä»¶æºå®è£ JDKçè¯ï¼é½æ¯å®è£ çopenjdk,é£ä¹å°åºä»ä¹æ¯openjdkï¼å®ä¸sun jdkæä»ä¹å ³ç³»ååºå«å¢ï¼
åå²ä¸çåå æ¯ï¼openjdkæ¯jdkçå¼æ¾åå§ç çæ¬ï¼ä»¥GPLåè®®çå½¢å¼æ¾åºãå¨JDK7çæ¶åï¼openjdkå·²ç»æ为jdk7ç主干å¼åï¼sun jdk7æ¯å¨openjdk7çåºç¡ä¸åå¸çï¼å ¶å¤§é¨ååå§ç é½ç¸åï¼åªæå°é¨ååå§ç 被æ¿æ¢æã使ç¨JRL(JavaResearch Licenseï¼Javaç 究ææåè®®)åå¸ã
è³äºopenjdk6åæ´æ¯æå ¶å¤æçä¸é¢ï¼é¦å æ¯openjdk6æ¯jdk7çä¸ä¸ªåæ¯ï¼å¹¶ä¸å°½éå»é¤Java SE7çæ°ç¹æ§ï¼ä½¿å ¶å°½éç符åJava6çæ åã
å ³äºJDKåOpenJDKçåºå«ï¼å¯ä»¥å½çº³ä¸ºä»¥ä¸å ç¹ï¼
ææåè®®çä¸åï¼
openjdkéç¨GPL V2åè®®æ¾åºï¼èJDKåéç¨JRLæ¾åºã两è åè®®è½ç¶é½æ¯å¼æ¾æºä»£ç çï¼ä½æ¯å¨ä½¿ç¨ä¸çä¸åå¨äºGPL V2å 许å¨åä¸ä¸ä½¿ç¨ï¼èJRLåªå 许个人ç 究使ç¨ã
OpenJDKä¸å å«Deploymentï¼é¨ç½²ï¼åè½ï¼
é¨ç½²çåè½å æ¬ï¼Browser PluginãJava Web Startã以åJavaæ§å¶é¢æ¿ï¼è¿äºåè½å¨Openjdkä¸æ¯æ¾ä¸å°çã
OpenJDKæºä»£ç ä¸å®æ´ï¼
è¿ä¸ªå¾å®¹ææ³å°ï¼å¨éç¨GPLåè®®çOpenjdkä¸ï¼sun jdkçä¸é¨åæºä»£ç å 为产æçé®é¢æ æ³å¼æ¾openjdk使ç¨ï¼å ¶ä¸æ主è¦çé¨ä»½å°±æ¯JMXä¸çå¯éå 件SNMPé¨ä»½ç代ç ãå æ¤è¿äºä¸è½å¼æ¾çæºä»£ç å°å®ä½æplugï¼ä»¥ä¾OpenJDKç¼è¯æ¶ä½¿ç¨ï¼ä½ ä¹å¯ä»¥éæ©ä¸è¦ä½¿ç¨plugãèIcedteaå为è¿äºä¸å®æ´çé¨åå¼åäºç¸ååè½çæºä»£ç (OpenJDK6)ï¼ä¿ä½¿OpenJDKæ´å å®æ´ã
é¨åæºä»£ç ç¨å¼æºä»£ç æ¿æ¢ï¼
ç±äºäº§æçé®é¢ï¼å¾å¤äº§æä¸æ¯SUNçæºä»£ç 被æ¿æ¢æä¸äºåè½ç¸åçå¼æºä»£ç ï¼æ¯å¦è¯´åä½æ æ ¼åå¼æï¼ä½¿ç¨Free Type代æ¿ã
openjdkåªå å«æç²¾ç®çJDKï¼
OpenJDKä¸å å«å ¶ä»ç软件å ï¼æ¯å¦Rhino Java DB JAXPâ¦â¦ï¼å¹¶ä¸å¯ä»¥å离ç软件å ä¹é½æ¯å°½éçå离ï¼ä½æ¯è¿å¤§å¤æ°é½æ¯èªç±è½¯ä»¶ï¼ä½ å¯ä»¥èªå·±ä¸è½½å å ¥ã
ä¸è½ä½¿ç¨Javaåæ ï¼
è¿ä¸ªå¾å®¹æç解ï¼å¨å®è£ openjdkçæºå¨ä¸ï¼è¾å ¥âjava -versionâæ¾ç¤ºçæ¯openjdkï¼ä½æ¯å¦ææ¯ä½¿ç¨Icedteaè¡¥ä¸çopenjdkï¼æ¾ç¤ºçæ¯javaãï¼æªéªè¯ï¼
æ»ä¹ï¼å¨Javaä½ç³»ä¸ï¼è¿æ¯æå¾å¤ä¸èªç±çæåï¼æºä»£ç çå¼åä¸å¤å½»åºï¼å¸æOracleè½å¤è®©JCPæ´èªç±å¼æ¾ä¸äºï¼è¿ä¹æ¯ææJava社åºæå¸æçã
真·手把手,从头教你编译JDK
本文将手把手教你编译 JDK,让你深入了解这一过程。尽管使用 JAVA 的人对 JDK 都不会陌生,但真正亲自编译它的开发者可能寥寥无几。然而,在遇到难以界定且现象奇特诡异的问题时,自定义 JDK 可能成为解决问题的关键。
首先,确保你的环境准备充分。我使用的是 CentOS 7.6 虚拟机,系统干净,没有安装额外软件。编译 JDK 需要特定的环境配置,例如确保 make 版本大于 3.8.1,这在 CentOS 7.6 以上版本中通常满足。此外,需要一个 Bootstrap JDK,版本为 7,避免使用版本为 8 的 JDK。将 Bootstrap JDK 的 bin 目录添加至 PATH,这样可以避免在后续步骤中配置参数。
接下来,按照 openjdk8 的 build 说明进行准备。下载并解压 JDK 7(版本为 jdk-7u-linux-x.tar.gz),并记住 java 的位置(/home/jdk/jdk1.7.0_/bin)。如果环境变量中已包含 JAVA_HOME,需将其删除,以确保编译过程顺利进行。
在准备阶段中,下载 openjdk 源代码时,可能会遇到各种问题。在收到错误提示如 "WARNING: jaxws exited abnormally" 或 "WARNING: jdk exited abnormally" 时,可以尝试重新执行 get_source 命令,该命令会仅下载未成功下载的组件。若长时间没有响应,检查带宽使用情况,必要时使用命令终止 Python 克隆进程,重新执行 get_source。
在下载完成后,执行编译命令:`bash ./configure make all`。确保 Bootstrap JDK 已添加至环境变量中,无需额外配置参数,除非通过 yum 安装依赖和调整 PATH。配置完成后,执行 `make` 命令,等待编译过程结束。
编译完成之后,可以使用自己编译的 JDK 来进行测试。通过 `images` 目录中的 j2sdk-image 和 j2re-image 来验证 JDK 的正确性。使用 `cp` 命令将 JDK 目录复制至其他位置,并检查版本信息。最后,编写脚本测试 JDK 的实际应用,例如使用 metabase 等复杂应用验证 JDK 的兼容性和稳定性。
通过本文的指导,你不仅能够成功编译 JDK,还能进一步理解 JDK 的内部结构和工作流程。实际操作中,可能会遇到一些挑战,但只要坚持下去,最终能够达到预期目标。