1.openjdkåjdkå·®å«å¤§å
2.一场因OpenJDK引发的码安血案
3.openjdk和jdk性能区别 有哪些区别
4.å¦ä½ç¨Macå®ç¾ç¼è¯OpenJDK 7
5.Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)
6.JDK在Linux上的安装路径定义jdklinux路径
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社åºæå¸æçã
一场因OpenJDK引发的血案
在进行项目开发时,遇到了一个令人头疼的码安问题。在本地调试一切正常,码安但将项目部署到服务器上时,码安却遇到了编译失败的码安情况。问题出在缺少一个名为javafx.util的码安app拖拽源码库。经过排查,码安发现原因在于服务器上使用的码安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等功能,提取apk的源码而OpenJDK则使用了开源的FreeType作为字体渲染器。
由于OpenJDK是一个开源项目,开发者可以自行克隆其源代码或下载源码包进行编译,从而生成定制化的JDK版本。基于OpenJDK的源码,还诞生了许多其他版本的JDK,如IcedTea、UltraViolet等。因此,服务器上使用的OpenJDK版本可能缺少某些特定的库,如javafx.util。
要解决这个问题,可以通过以下几种方式:
1. 确保在服务器上安装了包含javafx.util库的JDK版本,或者通过下载该库的jar包,并将其添加到项目中。
2. 将本地编译好的项目部署到服务器上,并确保服务器上的transflow随机森林源码JDK版本兼容。
3. 考虑使用Oracle JDK作为服务器上的JDK版本,因为Oracle JDK在商业许可下提供稳定的更新和支持。
4. 在本地编译项目时,使用jar包部署项目,以避免与服务器上JDK版本的兼容性问题。
通过上述方法,可以解决因使用OpenJDK导致的编译错误问题,并确保项目在不同环境下的顺利运行。在选择JDK版本时,考虑到项目需求、稳定性以及社区支持等因素,选择合适的JDK版本至关重要。
openjdk和jdk性能区别 有哪些区别
关于JDK和OpenJDK的区别,可以归纳为以下几点:
1、授权协议的不同:openjdk采用GPL V2协议放出,而JDK则采用JRL放出。两者协议虽然都是蜘蛛纸牌 js源码开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。OpenJDK不包含Deployment(部署)功能部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,这些功能在Openjdk中是找不到的。
2、OpenJDK源代码不完整。这个很容易想到,在采用GPL协议的Openjdk中,sun jdk的一部分源代码因为产权的问题无法开放openjdk使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码。而Icedtea则为这些不完整的部分开发了相同功能的源代码(OpenJDK6),促使OpenJDK更加完整。
3、部分源代码用开源代码替换。由于产权的看网页偷源码问题,很多产权不是SUN的源代码被替换成一些功能相同的开源代码,比如说字体栅格化引擎,使用Free Type代替。
4、openjdk只包含最精简的JDK。OpenJDK不包含其他的软件包,比如Rhino Java DB JAXP……,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。
5、不能使用Java商标。这个很容易理解,在安装openjdk的机器上,输入“java -version”显示的是openjdk,但是如果是使用Icedtea补丁的openjdk,显示的是java。(未验证)。
å¦ä½ç¨Macå®ç¾ç¼è¯OpenJDK 7
1.éæ©OS Xçæ¬å¾éè¦ã
ç®åè¿éMacçæ¬æ¯.ï¼é ç½®å¥½å¿ è¦ä¿¡æ¯ä»¥åå°±å¼å§ç¼ï¼ç»æé误满å±ãç®åçè¿ä¹ååç°æ¯ç¼è¯Cæ件çæ¶ååæ°æ误ï¼äºæ¯æ¥äºä¸ä¸ï¼æç¥éæ¯LLVMçæ¬å¤ªæ°ï¼ä¸å ¼å®¹ä½çæ¬çä¸äºç¼è¯åæ°ãç §çä¸é¢æ¹äºç¹ä»£ç ï¼ä½æ¯ä¾æ§ç¼è¯ä¸è¿ãæ¢ç¶é«çæ¬ä¸è¡ï¼å°±è£ 个ä½çæ¬çåãç±äºææ°çOS Xä¸è½è£ ä½çæ¬çXcodeï¼è£ äºXcodeæè½è£ LLVMï¼ï¼æ以å»ä¸äºä¸ä¸ª.8çOS Xè£ å¨èææºéï¼ç¶ååè£ ä¸ªXcode4.4ã
è£ å¥½Xcode以åï¼è¦æå¨ä¸è½½LLVMå®è£ ãæå¼Xcodeï¼é便建ç«ä¸ä¸ªç©ºé¡¹ç®ï¼ç¶åæå¼Preferencesï¼æ¾å°å¦ä¸æ示çå°æ¹å¼å§å®è£
第ä¸æ¥å±å°±è¿ä¹æå®äºã
2.å®è£ X
Xè¿ç©ææ¯unixç±»os使ç¨çå¾å½¢ç³»ç»ï¼.8以åçOS Xæ¯èªå¸¦çï¼ä½æ¯ä»æ¤ä»¥åå°±ä¸èªå¸¦äºã对åºäºMacï¼ä½ éè¦è£ XQuartzï¼è¿ä¸ªæ²¡æçæ¬éå¶ï¼å»ç½ä¸ä¸ææ°çå³å¯ãè£ è¿ä¸ªçåå æ¯å½æ¶å¨ç¼è¯PolicyToolsçæ¶ååºç°äºå¦ä¸é误ï¼
ld: library not found for -lX
å®è£ 以åè¦ä¸ºX建ç«è½¯è¿æ¥
sudo ln -s /usr/X/include/X /usr/include/X
3.å®è£ freetype
å¨linuxä¸ç¼è¯openjdkçæåå¯è½éå°è¿éè¦å®è£ freetypeçè¦æ±ï¼ç¶åå®è£ ä¸å¹¶å°å®è£ ç®å½å å°ç¯å¢åéé就好äºãä½æ¯OS Xä¸ä¸æ ·ï¼freetypeåç¬å®è£ å®é æ¯æ²¡ç¨çãè½ç¶åç¬å®è£ è½è®©ç¼è¯åçæ£æ¥éè¿ï¼ä½æ¯å°åé¢è¿æ¯ä¼åºéï¼è³äºåå æ没æ¾å°ãé£æä¹åå¢ï¼å®é ä¸å¦æå®è£ 好Xï¼freetypeå°±ä¸èµ·å®è£ 好äºï¼å¤§å®¶å¯ä»¥å»Xçç®å½éççæ¯å¦æfreetypeã
è½ç¶è¯´å®è£ äºXå°±èªå¸¦freetypeï¼ä½æ¯ç¼è¯è¿ç¨ä¸å¯è½ä¼åºç°å¦ä¸é误ï¼
error: freetype/config/ftheader.h: No such file or directory
å®é ä¸å°±æ¯ç®å½é®é¢ï¼æ§è¡ä¸é¢è¿å¥å½ä»¤å°±å¥½äºï¼
sudo ln -s /sr/X/include/freetype2/freetype/ /usr/X/include/freetype
4. é ç½®ç¯å¢åé
åå¨Linuxä¸ç¼è¯ç¸æ¯ï¼OS Xçç¯å¢åéé ç½®ç¸å¯¹æ¥è¯´ç®åå¾å¤ãåªéè¦é ç½®ç¼è¯éè¦çjdkållvmçç®å½å°±å¯ä»¥äºã
å 为å¾å¤æºä»£ç é½æ¯ç¨æ¬æºç°æçjdkæ¥ç¼è¯ï¼æ以é¢è£ ä¸ä¸ªä½çæ¬çjdkæ¯å¿ é¡»çï¼è¿éæ们éè¦å®è£ jdk6ãå®è£ 好以åï¼æ¾å°å ¶å®è£ ç®å½ï¼å¹¶æ·»å å¦ä¸ç¯å¢åéï¼
[plain] view plaincopy
export ALT_BOOTDIR=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
é常æ¥è¯´å®è£ ç®å½é½åºè¯¥å¨/System/Library/Java/JavaVirtualMachinesç®å½ä¸ãå¦æä¸å¨çè¯ï¼æ个æå·§å¯ä»¥æ¾å°ãå 为å®è£ 好jdk以åï¼ç³»ç»ä¼èªå¨å¨/usr/binä¸å»ºç«æåjavaå½ä»¤ç软è¿æ¥ï¼æ以æ§è¡âls -l /usr/bin/javaâå°±è½çå°è¿ä¸ªå½ä»¤æååªï¼ç¶åè¿ä¹é¡ºçæ¾ä¸å»å°±è½æ¾å°ã
llvmæ¯ç¼è¯Cç±»æ件æå¿ é¡»çï¼æ以è¦æå®çæå¨ç®å½æ·»å å°ç¯å¢åééãé常OS Xä¸å®è£ appé½ä¼æapp移å°Applicationsç®å½ä¸ï¼æ以ææåå®è£ Xcodeçæ¶åä¹æä»ç§»è¿å»äºï¼å¦æä½ æXcodeæ¾å¨äºå«çç®å½ï¼é£å°±æ¾å°å¯¹åºçç®å½å³å¯ã
[plain] view plaincopy
export ALT_COMPILER_PATH=/Applications/Xcode.app/Contents/Developer/usr/bin
5.è·åç¼è¯æºç
æç §è¿ä¸é¢ç第ä¸ç¹è·åæºä»£ç å¦æ没æè£ hgçéè¦èªè¡å®è£
å°ç°å¨ä¸ºæ¢ï¼ç¼è¯åçåå¤å·¥ä½å·²ç»å®æãæ们å¯ä»¥å æ§è¡make sanityæ§è¡ä¸ç¼è¯åçæ£æ¥ãå¦ææ£æ¥éè¿ï¼å æ¥ççå ·ä½çç¼è¯å½ä»¤ï¼
[plain] view plaincopy
make ALLOW_DOWNLOADS=true SA_APPLE_BOOT_JAVA=true SKIP_DEBUG_BUILD=false SKIP_FASTDEBUG_BUILD=false ALWAYS_PASS_TEST_GAMMA=true HOTSPOT_BUILD_JOBS=`sysctl -n hw.ncpu`
è¿éæ两个é®é¢ï¼
a. ALLOW_DOWNLOADS=true表示ç¼è¯è¿ç¨ä¸å 许ä¸è½½ãå 为æäºç¼è¯æ¨¡åï¼æ¯å¦jaxpï¼ç¼è¯èæ¬ä¸æå®äºéè¦ä¸è½½ç¹å®çå ãè½ç¶æ没è¯è¿è®¾ç½®æfalseä¼ä¸ä¼å½±åç¼è¯ï¼ä½æ¯è¿æ¯æ¨è设置ætrueãä½æ¯è¿å°±å¸¦æ¥å¦ä¸ä¸ªé®é¢ï¼ä¸è½½è¿ç±»å å¾è´¹æ¶é´ï¼ææ¶åå°±ä¼å¨é£å¡å¾é¿æ¶é´ï¼æ以ææ ¹æ®ç¼è¯æ¥å¿æ¾å°ç¼è¯èæ¬ä¸æ§å¶ä¸è½½çå ·ä½å½ä»¤ï¼ä¿®æ¹ä¿®æ¹å¹¶ä¸æç¨è¿ é·ä¸ç对åºå æ¾å°æ£ç¡®ç®å½ä¸ï¼ç¶åéæ°ç¼è¯ä¸éï¼å°±è½é¡ºå©éè¿äºãè¿ä¸ç¹åé¢æä¼è¯¦è¯´ã
b. SKIP_DEBUG_BUILD=false SKIP_FASTDEBUG_BUILD=falseè¿ä¸¤ä¸ªè¡¨ç¤ºç¼è¯åºæ¥çjdkæè hotspotæ¯å¦å¯ä»¥debugãFASTDEBUG表示çåºè¯¥æ¯æä¾ç®åçdebugåè½ï¼å¦ææ³è¦å®æ´çdebugï¼åSKIP_DEBUG_BUILDå¿ é¡»è®¾ç½®ä¸ºfalseãä¸è¿è¿éæéä¸ç¹ï¼å¦ææ³å¨debug jdkçæ¶åè½çå°debugä¿¡æ¯ï¼æ¯å¦åéåçï¼åªéè¦SKIP_FASTDEBUG_BUILD设置为falseå°±å¯ä»¥äº
å¦æè¿ä¸¤ä¸ªé®é¢é½ä¸æ¯é®é¢ï¼é£ä¹å°±å¯ä»¥æå车äºãå¦ædebugåfastdebugé½æ¯falseï¼åå ä¸ç¨èææºç¼è¯ï¼æ以éè¦çæ¶é´ä¼æ¯è¾é¿ï¼ä½ ä¹è®¸éè¦æ¾ä¸é¨é¿ä¸ç¹ççµå½±æ¥æ¶ç£¨ä¸ä¸äºãæåç¼è¯åºæ¥çç»ææ¯è¿æ ·çï¼
j2sdk-imageå°±æ¯èªå·±ç¼è¯åºæ¥çjdkï¼å¯ä»¥ç´æ¥ç¨äºãè³äºå ¶ä»ç®å½ä¸çå 容ï¼åä½èªå·±ç¢ç£¨å§ã
ç°å¨æ¥è¯´ä¸ALLOW_DOWNLOADS=trueå¼èµ·çé®é¢ã
ä½æ¯éå°ä¸è½½å¾ä¹ çå æ»å ±æä¸ä¸ªï¼
jaxp_.zipãjdk7-jaf-__.zipãjdk7-jaxws2_2_4-b-__.zip
ä¹å说è¿å¯ä»¥ä¿®æ¹ç¼è¯èæ¬è·³è¿ä¸è½½å¹¶ä¸ç¨æ们已ç»ä¸è½½å¥½çï¼ä½æ¯å®é ç¼è¯è¿ç¨ä¸ï¼è¿ä¸ä¸ªå 对åºççç¼è¯èæ¬æ¯å¨æçæçï¼æ以åªè½çå°ä»å¡å¨é£äºï¼æè½åä¸æ¥å¹¶æ¾å°èæ¬ä¿®æ¹ä¹ãå æ¤å 为è¿ä¸ä¸ªå ï¼æ»å ±éè¦å3次ãï¼æ¯èµ·ä¸ç´å¡å¨é£å¥½å¤ªå¤äºã
å设ç¼è¯çæ¯æ®éçæ¬ï¼å³éDEBUGåéFASTDEBUGãä¸é¢ä»¥jaxp_.zip为ä¾å讲ä¸ä¸æä¹ä¿®æ¹å¯¹åºèæ¬ï¼
èæ¬æå¨ä½ç½®ï¼openjdkæ ¹ç®å½/build/macosx-universal/jaxp/build/xml_generated/build-drop-jaxp_src.xml
Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)
Java开发者必读:JDK版本选择指南及安装验证
Oracle Java SE的支持策略是关键因素,了解其LTS(长期支持)版本尤为重要。LTS版,如JDK ,将持续到年,以稳定性、安全性和性能优化为主,默认支持期限长达8年,JDK 8的延长至年。自年起,LTS发布间隔缩短至每两年一次。 Oracle JDK之外,社区和企业根据Open JDK构建了更多定制版本,如Amazon Corretto针对云平台做了优化。在选择JDK时,需考虑生产环境需求(如AWS的Corretto)、第三方框架(如Spring)支持、开源许可以及发行商的技术实力。 对于个人开发者,Eclipse Adoptium和Microsoft OpenJDK是不错的选择。Microsoft的OpenJDK基于OpenJDK源代码,通过严格的测试,确保与Java规范兼容,适合替代其他OpenJDK版本。安装JDK(以Windows 为例)
验证JDK安装:在命令行中运行特定命令,如无响应或未找到命令,可能需要检查配置。
JDK在Linux上的安装路径定义jdklinux路径
Java程序设计语言(Java)由Sun Microsystems提出的一种用于开发应用程序的平台无关的面向对象编程语言。为了实现Java程序,需要通过安装Java程序软件来构建运行时环境(JRE)和开发时环境(JDK),这两个软件包都是Java的必备库,而在Linux上安装Java时,也是必须要安装JDK和JRE的,下面我们就来讨论一下在Linux上安装JDK的安装路径定义的事情。
首先,在Linux上安装JDK,有两种常见的途径,一种是使用源码包安装,另一种是使用包安装管理程序。使用源码包安装的方法是将源码文件下载到本地,然后在控制台上使用tar或rpm安装,安装结束后,JDK就安装完成了。另一种方式,首先按照Linux系统版本使用yum或apt等包管理工具安装openjdk,然后从Oracle网站上下载相应系统版本的JDK,然后使用rpm或tar命令安装就可以了。
安装完JDK后,下一步就是要定义安装时可以定义的路径,通常在Linux上,JDK会安装到/opt/ folder中,例如:
/opt/java/jdk1.8.0_xx
其中xx表示Java的版本号,其余路径也是类似的,安装完成之后,需要设置环境变量JAVA_HOME,例如:
export JAVA_HOME=/opt/java/jdk1.8.0_xx
最后一步,需要加入到用户变量PATH中,例如:
export PATH=$JAVA_HOME/bin:$PATH
以上只是安装时定义的一种参考路径,实际安装时可以根据用户的具体需求,更改相应的安装路径,以安装不同版本的JDK,可以在不同的路径中互相安装,同时设置不同的环境变量,使之仅影响其中一个JDK环境。总之,在Linux上安装JDK时,推荐手动安装源码,定义安装路径,在源码安装完成后,添加环境变量,就可以完成绝大部分的安装,如果有多个版本的JDK要同时安装,只需要使用不同的目录安装,并定义不同的环境变量即可。