Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
JVM×î¼òÉú´æÖ¸ÄÏ
 
»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-06-09
 

ΪʲôҪдÕâ¸öÖ¸ÄÏ

µ±Ä㿪ʼ½Ó´¥Ò»¸öÐÂµÄÆ½Ì¨Ê±£¬¶¼»á´Ó×öͬһ¼þÊ¿ªÊ¼£¬Í¨³£Äã»á¸ù¾ÝÄãÒÑѧµÄ¸ÅÄî»òÕß¿ò¼ÜÀ´³¢ÊÔ¿ìËٴËü£¬µ«ÊÇÄãÎÞ´ÓÏÂÊÖ£¬ÒòΪËüÃÇͨ³£ÒÔȫеÄÃû×ֺͷ½·¨Õ¹ÏÖÔÚÄãÃæÇ°¡£

×ßÍêÕâ¸ö¹ý³Ì·Ç³£ºÄʱ£¬ÓÐʱÉõÖÁÈÃÈËÒ»³ïĪչ¡£ÕâÆªÖ¸ÄÏÕýÊÇÓÃÀ´°ïÖúÄÇЩÐÂÊÖ±ÜÃâ´ËÀàÎÊÌâµÄ¡£

ÕâÆªÖ¸ÄÏÎÒÒ²¿ÉÒÔÊÜÒæ, ÒòΪÎÒÈ·¶¨ÎÒÒѾ­ÓÐÁË´íÎó²¢ÇһᷢÏÖ¸ü¶àµÄ´íÎó,ËùÒÔÄã·¢ÏÖÈκδíÎóÇ뼰ʱ·´À¡¸øÎÒ¡£ ×îºÃµÄ·½Ê½ÊǸøÎÒ·¢ËÍpull request¡£

³ÖÐø¸üÐÂ

ËäÈ»ÕâÖ»ÊÇһƪ²©¿Í, µ«Êǵ±ÎÒÅöµ½Ð¶«Î÷µÄʱºòÎÒÒ²»á¼´Ê±¸üÐÂÕâ¸öÒ³Ãæ¡£ÎÄÕÂ×î¶¥²¿ÓÐ×îеĸüÐÂÈÕÆÚ.

Ä¿±êÈËȺ

ÕâÆªÖ¸ÄÏÖ÷ÒªÊÇÕë¶Ô.NET¿ª·¢Õߣ¬ÒòΪÔÚÕâÀïÄã»á·¢ÏÖÖî¶à¿ÉÒÔÄÃÀ´ºÍ.NET½øÐбȽϵĵط½¡£Æäʵ´Ó±¾ÎĵÄURLÄã¾Í¿ÉÒÔ¿´³öЩ¶ËÄßÁË¡£»°ËäÈç´Ë£¬ÎÒͬÑùҲϣÍûÕâЩÄܶÔÄÇЩ³õ´Î½Ó´¥Javaƽ̨µÄ·Ç.NET·¢¿ªÕßÓÐËù°ïÖú¡£

»ù´¡

JavaÓïÑÔ£¬Java»·¾³£¬JavaÐéÄâ»ú

ÕâÈýÕßÈ«Íê²»ÊÇÒ»»ØÊ¡£Ò»¸öÊDZà³ÌÓïÑÔ(ÏëÏëC#)£¬Ò»¸öÊDZà³Ì»·¾³(ÏëÏë.NET¿ª·¢»·¾³), ÁíÒ»¸öÔòÊÇ¿ª·¢Æ½Ì¨(ÏëÏëCLR)¡£
²»ÐÒµÄÊÇËÆºõJavaͨ³£±»ÓÃÀ´Ö¸´úÒÔÉÏËùÓС£
²»ÒªÒ»Ìõ·×ßµ½ºÚ¡£ËäÈ»ÎÒ²»Ï²»¶JavaÕâÑùµÄÓïÑÔµ«ÊÇÕû¸öJavaµÄÉú̬ϵͳȴ³äÂúÁË»îÁ¦Í¬Ê±ÓÐÐí¶à´´Ð²»¶Ï·¢Éú¡£×÷ΪһÃû.NET¿ª·¢Õߣ¬ÄãÓ¦¸Ã¶ÔNHibernate£¬NUnit£¬NLog£¬NAntµÈµÈ·Ç³£Á˽⣬Æäʵ ËùÓÐÕâЩ¶¼À´×ÔÓÚJavaµÄÉú̬ϵͳ£¨°ÑNÈ¥µô¾ÍÊÇÁË£©¡£

¶àÓïÑÔÆ½Ì¨

°ÑJVMÏëÏóÊÇCLR¡£ËüÃÇÊǶԶàÓïÑÔ±à³ÌÌṩ¿çƽ̨µÄÐéÄâ»ú¡£ËäÈ»ËüÃǶ¼Ö§³Ö¶àÓïÑÔ£¬µ«ÊÇËüÃÇÖ®¼ä»¹ÊÇÓвî±ðµÄ¡£
ÔÚCLRÉÏ£¬ÎÒÃÇÖ÷ҪʹÓÃC#£¬VB.NET(¡°±ôΣÎïÖÖ¡±)ºÍF#,ÔÚJVMÉϾÍÊÇJava£¬Scala£¬Clojure£¬ Ceylon£¬Groovy£¬JRubyºÍKotlin£¬ÕâÀïÖ»ÊǾټ¸¸öÀý×Ó¡£

JVM×Ö½ÚÂë

JVM×Ö½ÚÂëÊÇ»ùÓÚJVMµÄÓïÑԵıàÒë´Ó¶øÔÚJVMÉÏÔËÐС£ÕâºÍ.NETÉϵÄILÏàËÆ¡£

¿çƽ̨

JVMÊÇ100%¿çƽ̨µÄ¡£³ýÁËWindows£¬OSXºÍLinux£¬ËüÒ²¿ÉÒÔÔÚÐí¶àÆäËüÉ豸ÉÏÔËÐС£

JVM²¿Ê𣬰汾ÀàÐͺÍÉý¼¶°æ±¾

JVMÓжàÖÖʵÏÖ¡£×î³£¼ûµÄ¾ÍÊÇÔÚOracleºÍOpenJDKÖеÄʵÏÖ¡£ÉõÖÁÓÐÒ»ÖÖ.NETʵÏÖ½Ð×öIKVM.NET¡£

°æ±¾ÀàÐͺÍÉý¼¶°æ±¾

Õâ¿ÉÄÜÊÇĿǰΪֹÔÚ±¾Ö¸ÄÏÖÐ×ÔӵIJ¿·Ö¡£Äã¸ù±¾ÎÞ·¨ÏëÏóÁ¬ÏñÃüÃû»òÕß°æ±¾¿ØÖÆÕâÑù¼òµ¥µÄÊÂÇé¶¼ÄܸãÔÒ¡£ÕâÖÖÃüÃû·½Ê½ÉõÖÁʹ΢ÈíµÄ²úÆ·¶¼ÏԵúÏÀí²»ÉÙ¡£

ÈÃÎÒÃÇ¿ªÊ¼°É£º

°æ±¾ÀàÐÍ

JRE ¨C JavaÔËÐл·¾³¡£ÕâÊÇÓÃÀ´ÔËÐÐJavaÓ¦ÓóÌÐòµÄ¡£µ«Äã²»Äܽö½öÒÀ¿¿ËüÀ´¿ª·¢ÔËÐÐÔÚJVMÉϵÄÓ¦ÓóÌÐò¡£
Java SE (JDK) ¨C Java±ê×¼°æ¡£ËüÒ²³ÆÎªJDK¡£ÕâÊÇÔÚJVMÉÏ¿ª·¢Ó¦ÓóÌÐò×îÆðÂëµÄÌõ¼þ¡£
Java EE ¨C JavaÆóÒµ°æ¡£ºÃÁË£¬¿´Ãû×ÖÄã¾Í¶®ÁË¡£Í¨¹ýËü,Äã¿ÉÒÔ»ñµÃËùÓÐÓÐ¹ØÆóÒµ¼¶·Ö²¼Ê½µÄ¶«Î÷´ó¹æÄ£Ó¦Óá£Ã÷È·Ò»µãµÄÊÇËü°üº¬ÁËJava SE¡£
Java ME ¨C JavaÒÆ¶¯°æ¡£ÕâÊÇÕë¶ÔÒÆ¶¯µç»°ºÍ±ãЯÉ豸µÄ£¬ËüºÜÏñ.NET΢¿ò¼Ü¡£
JavaFX ¨C ´úÌæÁËSwing£¬ËüÊÇJavaµÄÖ÷ÒªGUI¿ª·¢°ü¡£Í¬Ê±Ëü(¾¡¹ÜÓÐЩÕùÒéµÄ»°Ìâ)Ò²ÃæÏòRIAµÄ¿ª·¢¡££¨ÄѵÀÊÇHTML/JS/CSS²»¹»ºÃÂð£¿)¡£
¿ÉÒÔÍÆ¶Ï£¬ËùÓÐÐÎÈçJava XYµÄ°æ±¾¶¼¿ÉÒÔд³ÉJDKµÄÐÎʽ¡£

ÕâÀïÄã¿ÉÒÔÕÒµ½¸ü¶àÏà¹ØµÄÀúÊ·ºÍÃüÃû¡£

Éý¼¶°æ±¾

µ±Ç°µÄJava°æ±¾ÊÇ7£¬Java 8 ½«ÓÚ2014Äê·¢²¼¡££¨ÒëÕß×¢£ºJava 8½«ÓÚ2014Äê3ÔÂ18ÈÕÕýʽ·¢²¼£©

²éѯÄãËù°²×°µÄJava°æ±¾ºÍÀàÐÍ

java -version

Ä㽫»áµÃµ½ÈçÏÂÐÅÏ¢£º

java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

Õâ¾ÍÊÇJava 7¡£ÎªÊ²Ã´Õâô³Æºô£¿·Ç³£¼òµ¥,½«1.7.0_40ÖеÄ1È¥µô¾ÍÊÇ7.0_40¡£ÆäÖÐ0_40±íʾµÄÊǸüаü¡£ÕâÊÇJava 7µÄËùÓа汾·¢²¼¡£

ÒÔ´ËÀàÍÆ1.5ÊÇJava 5£¬1.6ÊÇJava 6£¬1.7¾ÍÊÇJava 7£¬ËùÒÔÄã²Â²âһϾÍÖªµÀ£¬Java 8½«»áÊÇ 1.8¡£

Êǵ쬷´ÕýÎÒÊÇÖªµÀµÄ¡£

°²×°Java

Ò»µ©ÄãÕÒµ½ÁËÄãÏëҪѧϰµÄ°æ±¾£¬Äã¿ÉÒÔÈ¥OracleµÄ°²×°Ö¸ÄÏÒ³Ãæ½øÐÐÏÂÔØ°²×°¡£

Èç¹ûÄãÏëÒªÖªµÀΪʲôÄãÐèÒª°²×°Ask Toolbar£¬²»Òª¹ÖOracle¡£ÏÔÈ»ÕâÊÇÔÚËüºÍSun֮ǰ´ï³ÉµÄЭÒé¡£ÎÒÌý˵һµ©ÆÚÂúËûÃǾͲ»»á¼ÌÐøÂÄÐÐЭÒé¡£

Ó¦ÓóÌÐòÊä³öÓÖ½ÐArtifacts

ÎÞÂÛÔÚ.NETÉÏ»¹ÊÇÔÚ±¾µØÓ¦ÓóÌÐòÉÏ£¬±àÒëͨ³£ÒԵõ½Ò»¸ö¿ÉÖ´ÐÐÎļþ»òÕßһЩ¶¯Ì¬Á´½Ó¿âÎļþÀ´±ê־׎áÊø¡£ ¶øÍ¨¹ýJava£¬Ä㽫ÔÚÊä³öÎļþ¼ÐÖеõ½Èô¸É.classÎļþ¡£

ͨ³£Ã¿¸öÀà¶ÔÓ¦Ò»¸öJavaÀࣨµ±±àÒëJavaÓïÑÔ»òÕ߯äËüÓïÑÔʱ°´ÕÕÔ¼¶¨×ª»¯Îª×Ö½ÚÂ룩¡£

ÕâЩÀàÊÇJVM×Ö½ÚÂ룬Õâ·Ç³£ÀàËÆÓÚCLRÖеÄIL¡£

JARÎļþ

ÀàÎļþ²»»áÍòÄê²»±ä£¬ÄãÍêÈ«¿ÉÒÔ´´½¨Ò»¸öJARÎļþ£¬Ö»²»¹ý¾ÍÊÇÒ»¸ö.classÎļþµÄѹËõ°ü¶øÒÑ¡£Äã¿ÉÒÔͨ¹ýÄã×îϲ»¶µÄ¹¤¾ßÀ´´´½¨JARÎļþ£¬»òÕ߸ü¼òµ¥µÄ·½Ê½¾ÍÊÇÔËÐÐ

jar cf jar-file input-file(s)

WARÎļþ

WARÎļþ¾ÍÊÇÒ»¸öÓÉSun¹«Ë¾´´ÔìµÄÃæÏòÍøÂçÓ¦ÓõÄJARÎļþ¡£Ëü°üº¬ÁËÐí¶àÀàÎļþºÍһЩ¸½¼ÓµÄÔªÊý¾ÝÒÔ¼°ÃèÊöÍøÂç·þÎñÆ÷£¨ÈçTomCat£©µÄÎļþ¼Ð¡£

ÔËÐÐJavaÓ¦ÓóÌÐò

ÈκÎJava³ÌÐòÖ»ÄÜÓÐÒ»¸öÖ÷ÀàÔÚÃüÁîÌáʾ·ûÖÐÔËÐС£ÀýÈ磺

java <class_containing_main_method>

Äã±ØÐëÔÚÓµÓÐ.classµÄÎļþ¼ÐÏÂÔËÐÐÕâ¶Î´úÂë¡£

Classpath

ÔÚÔËÐÐÓ¦ÓóÌÐòʱ,JVMÔÚµ±Ç°Îļþ¼ÐÏÂѰÕÒËùÓбØÒªµÄÒÀÀµÎļþ,È»ºóÔÙ²éÕÒCLASSPATH»·¾³±äÁ¿ËùÖ¸ÏòµÄÒ»¸ö»ò¶à¸öÎļþ¼ÐϵÄ.classÎļþ»òÕßJARÎļþºÍZIPÎļþ¡£

Äã¿ÉÒÔÉèÖÃCLASSPATHÈ«¾Ö»·¾³±äÁ¿£¬µ±ÔËÐÐÒ»¸öÓ¦ÓóÌÐòʱͨ¹ýʹÓÃJavaÃüÁî²¢Ìí¼ÓÒ»¸öÃüÁîÐвÎÊý:

java <class_containing_main_method> -cp <class_path>

ÿ¸öÌõÄ¿¶¼ÊÇÓ÷ֺŸô¿ªµÄ¡£

¹¹½¨¹¤¾ß

.NETÖÐÓÐÐí¶à¹¹½¨¹¤¾ß°üÀ¨MS Build£¬NAnt£¬Albacore£¬FakeµÈµÈ¡£JVMҲûʾÈõ¡£ËäÈ»Ðí¶àÓïÑÔ¶¼ÓÐËüÃÇ×Ô¼ºµÄ¹¹½¨¹¤¾ßÀýÈçClojureÖеĻòÕßScalaÖеÄSBT£¬Ðí¶àÓïÑÔ(°üÀ¨Ç°ÃæËùÌáµ½µÄ)¿ÉÒÔʹÓøü¼Ó±ê×¼µÄ¹¹½¨¹¤¾ß¡£

Ant

ËüÊÇXML£¬NAntÒ²»ùÓÚËü¡£Õâ¾ÍÏñMS-Build£¬¾¡¹ÜËüÖ»ÊÇXMLÎÒÈÔҪǿµ÷Ëü¡£

Maven

Maven·Ç³£Á÷ÐС£µ±Äã·¢ÏÖÏîÄ¿ÖÐÓÐÒ»¸öpom.xmlÎļþ£¬ÄÇÕâ¸öÏîÄ¿¾ÍÊÇMavenÁË¡£MavenÒ²»áË𻵡£MavenÒ²ÊÇXML¡£

È»¶ø£¬Maven²»½ö½öÊÇÒ»¸ö¹¹½¨¹¤¾ß¡£ËüÊÇÒ»¸ö·âװϵͳ¡£Õâ¾ÍÏñ.NetÖеÄNuGet£¬Ò²ÏñNode.jsÖеÄNPM¡£Ïñnuget.org£¬ÆäʵҲÓÐmaven.org¡£ÕâÀàËÆÓÚ¡°Èç¹û²»ÓÃnuget.org¾ÍÎÞ·¨ÔËÐС±£¬ÕâÖÖÇé¿öÔÚJavaϵͳÖÐҲͬÑù´æÔÚ¡£

NuGet£¬ÄãÒ²¿ÉÒÔ´´½¨Äã×Ô¼ºµÄMaven°æ±¾¿â¡£Artifactory¾ÍÄÜÈÃÄãÕâô×ö¡£

Gradle

GradleÊÇÒ»¸ö¸üºÃµÄMaven¡£Ëü»ùÓÚGroovyËùÒÔÄã¿ÉÒÔ°ÚÍѸ´ÔÓµÄXML²¢ÇÒ´´½¨Ò»¸ö¸üºÃµÄÒÀÀµ¹ØÏµ¹ÜÀíµÄ·½·¨¡£

ÎÒÕýÔÚ³¢ÊÔ¸ü¶àµÄʹÓÃGradle¡£

IntelliJ IDEAµÄ¹¹½¨

ËäÈ»IDE¸ü¶àµÄÊÇÊôÓÚ¹¤¾ß²¿·Ö£¬IntelliJ IDEAÒ²ÌṩÁËËü×Ô¼ºµÄ¹¹½¨ÏµÍ³¡£È»¶øÄã½ö½öÄܹ»ÔÚºÏÊʵĻ·¾³ÏÂʹÓÃËü£¬Ò²¾ÍÊÇIntelliJ IDEAºÍTeamCityµÄ»·¾³¡£

¿ò¼ÜºÍ¿â

ÕâÀïÓдóÁ¿µÄ¿ò¼ÜºÍ¿â£¬ÎÒÖ»»á¶ÔÎÒÒѾ­ÖªµÀµÄ»òÕßÎÒÐèÒªµÄ²¿·Ö½øÐнéÉÜ¡£Èç¹ûÄãÓиüºÃµÄÍÆ¼ö£¬Çë¸øÎÒ·¢Ò»¸öpull request¡£

JSONÐòÁл¯

Jackson ¨C ÎÒÓùýËü£¬¸Ð¾õºÜºÃ¡£

µ¥Ôª²âÊÔ

Ï൱¶àµÄµ¥Ôª²âÊÔ¿ò¼Ü£º

JUnit ¨C ×÷ΪÊÂʵÉϵıê×¼£¬ËüÏ൱²»´í£¬²¢ÇÒ±»Öڶ๤¾ßÖ§³Ö¡£

Spek ¨C ·ÅÆú¡£ÕâÊÇÎÒ×Ô¼ºµÄ¿ò¼Ü£¬µ«ÎÒÈÔÈ»ÔÚÓã¬ÖµµÃÒ»Ìá¡£ËüÄܸüºÃµØÖ§³ÖDSL£¬ÖÁÉÙÎÒÕâôÈÏΪ¡£

JBehave ¨C Dan NorthµÄԭʼJBehave¿ò¼Ü¡£

TestNG ¨C JUnitµÄÌæ´úÆ·¡£ÎÒÓõIJ»¶à£¬ËùÒÔ²»¹ý¶àÆÀÂÛ¡£

Ä£Äâ¿ò¼Ü

×î½üÎÒҲûģÄâʲô¿ò¼Ü£¬µ«ÊÇÎÒÎÒÔø¾­ÓùýÒ»¸ö£º

Mockito

ÈÕÖ¾

SLF4J ¨C ÕâÊÇÔÚJVMƽ̨ÉÏÓÃÓڼǼÈÕÖ¾×î³£¼ûµÄ·½Ê½¡£Ê¹ÓÃËü¿ÉÒÔÈÃÄ㣨ÀíÂÛÉÏ£©±ä¸üÈÕÖ¾²¢ÇÒÔÊÐíÑ¡ÔñÄãËùÐèÒªµÄ¿â¡£

IoCÈÝÆ÷

Guice ¨C À´×ÔGoogle£¬ÎÒÓùýËü£¬Ï൱²»´í¡£

Spring ¨C À´×ÔSpring¿ò¼Ü£¬ÎÒ²»È·¶¨ÄãÊÇ·ñ¿ÉÒÔ²»ÓÃÅäÖÃXML¾ÍʹÓÃËü£¬ÒòΪÎÒҲûÓùý¡£

HTTP¿Í»§¶Ë

ÎÒÕýʹÓñê×¼µÄApache Commons£¬Ò²½ÓÊܸüºÃµÄÑ¡Ôñ¡£

ApacheµÄHTTP¿Í»§¶Ë ¨C ÎÒÕýÔÚʹÓÃËü¡£·Ç³£ÐèÒªÒ»¸ö·â×°Æ÷(Wrapper)¡£

Web¿ò¼Ü

Ðí¶àµÄWeb¿ò¼Ü¶¼»ùÓÚJava Servlet APIµÄͨÓýӿڡ£ÕâÀàËÆÓÚOWIN.

Ó¦ÓÿÉÒÔÍйÜÔÚGlassFish£¬Jetty£¬Apache TomCatÉÏ¡£

˳±ã˵һÏ£¬OracleÐû²¼Ëü½«Í£Ö¹¶ÔGlassFishÉÌÒµ°æµÄÖ§³Ö£¬ËüµÄÖ÷Òª´«²¥Õߣ¬Arun Gupta£¬×î½üÀ뿪OracleÈ¥ÁËRedHat¡£ÏÖÔÚËüÈÃWildFlyÀ´×÷ÎªÌæ´ú¡£

¶ÔÓÚWeb¿ª·¢¶øÑÔ£¬Ò»¸ö·Ç³£Ê±÷Ö¶øÇÒÇáÁ¿¼¶µÄÑ¡ÔñÊÇVert.x¡£Ëü»ùÓÚNettyµÄ»ù´¡ÉϹ¹½¨µÄ,ÄãÉõÖÁ¿ÉÒÔʹÓò»Í¬µÄÓïÑÔ£¬ÈçJava, JavaScript, Ruby¡£

ÍøÂç

Netty ¨C ¸ßЧµÄÒ첽ʼþÇý¶¯¿ò¼ÜÀ´±àд¸ßÐÔÄܵÄwebÓ¦ÓóÌÐò¡£ËüÊÇ´ÓͨÐŲã³éÏó³öÀ´µÄ£¬ËùÒÔÄã¿ÉÒÔʹÓÃHTTP£¬SocketsµÈµÈ¡£

ÆäËü¿âºÍ¹¤¾ß

JodaTime ¨C JavaÖÐʱ¼äºÍÈÕÆÚµÄ¹ÜÀí±È.NET»¹Òª´àÈõ¡£Ê¹ÓÃJodaTime¿ÉÒÔÓÐЧ½â¾öÕâ¸öÎÊÌâ¡£ÕâÆðÔ´ÓÚJon SkeetµÄNodaTime¡£

Reflections ¨C ʹ·´Éä¸ü¼ÓÍêÃÀ¡£

Apache Commons ¨C Ðí¶à¾­³£Óõ½µÄСÐͿ⡣

Ô¼¶¨

ËäȻԼ¶¨Ôںܴó³Ì¶ÈÉÏÊǸù¾ÝÄãÑ¡ÔñµÄ±à³ÌÓïÑÔÀ´¾ö¶¨£¬µ«ÊÇ»ò¶à»òÉÙ¶¼ÓÐһЩ¹²Í¬µÄÔ¼¶¨¡£

ÃüÃû¿Õ¼ä

ÃüÃû¿Õ¼äÊÇÄæÐòµÄ£¬»»ÑÔÖ®£¬ËüÒÔ¶¥¼¶ÓòÃû¿ªÊ¼£¬È»ºó²ÅÊǹ«Ë¾/×éÖ¯ÓòÃûµÈ¡£

org.hadihariri.spek.runners

²»ÐÒµÄÊÇ£¬Ä³Ð©Ê±ºò£¬ËüÈ¡¾öÓÚÿ¶ÎÊÇ·ñ³ÉΪÁËÒ»¸öÎļþ¼Ð¡£ÄÇÒâζ×Å×îÖÕÄã»áÔÚGitHubµÃµ½£º

ÐÒÔ˵ÄÊÇÈç¹ûÄãʹÓÃÁËÒ»¸ö²»´íµÄIDE£¬ÕâЩ¶¼²»ÊÇÎÊÌâ¶øÇÒÒ×ÓÚ¹ÜÀí¡£

ÊôÐԺͷ½·¨Ãû³Æ

Èç¹ûÄãÔ­À´ÊÇѧC#µÄ£¬¶øÏÖÔÚÕýÔÚʹÓÃÏñJava£¬Scala»òÕßKotlin£¬Ô¼¶¨½«ÒÔǰÃüÃûµÄ×ֶΣ¬ÊôÐÔÒÔ¼°·½·¨½øÐе߸²¡£ËüÃǶ¼ÒÔСÍÕ·å(lowerCamelCase)µÄÐÎʽÃüÃû¡£

Èç¹ûÄ㿪ʼʹÓÃJava£¬¿ÉÒÔä¯ÀÀÀ´½øÐбȽϡ£

¹¤¾ß

µ±Äã°²×°JDKʱÄã¿ÉÒԵõ½Ò»¸ö±àÒëÆ÷£¨javac£©ºÍÒ»¸öjar´´½¨Æ÷£¨jar£©£¬javadoc(ÓÃÓÚ´´½¨JavaÎĵµ)ÒÔ¼°Ò»Ð©ÓÐÓõŤ¾ß¡£ÔÙ¼ÓÉÏÒ»¸öÎı¾±à¼­Æ÷Äã¾Í¿ÉÒÔ´´½¨²¢ÔËÐÐÒ»¸öÓ¦ÓóÌÐòÁË¡£

¹ØÓÚIDE

JavaÁìÓòÖÐÓÐÈý¸öÖ÷ÒªµÄIDE£º

NetBeans

Eclipse

IntelliJ IDEA

ÕâÈý¸ö¶¼ÊÇ×ÔÓÉÔËÓªµÄ¡£Èç¹ûÄãÏëÒªÓÐһЩ¶îÍâµÄ¿ò¼ÜÖ§³Ö£¬IntellIJ IDEA¾ÍÓÐÒ»¸ö×îÖÕµÄÉÌÒµÔËÐа棬»»¾ä»°Ëµ£¬ÕâÓÐÏÊÃ÷µÄÆóÒµÌØµã¡£ÍêÕû±È½Ï

ËäÈ»Eclipse¿ÉÄÜÊÇ×î³£Óõļ¯³É¿ª·¢»·¾³£¬µ«ÎÒ»¹ÊÇÑ¡ÔñÓÃIntelliJ IDEA¡£Èç¹ûÄãÏëÓÃReSharper£¬ÄãÒ»¶¨»áϲ»¶IntelliJ IDEA¡£µ±È»£¬Äã¿ÉÒÔ˵ÎÒÆ«Ì»Ëü¡£

³ÖÐø¼¯³É

ÔÚ³ÖÐø¼¯³É¹¤¾ßµÄ·½Ãæ,.NETºÍJVMÓÐÖî¶àÏàËÆÖ®´¦¡£ÊÂʵÉÏ£¬ËüÃÇÖеÄÐí¶à¶¼ÊÇ»ùÓÚJVMµÄ¡£

TeamCity ¨C Ìṩһ¸öÃâ·Ñ°æ¡£

Jenkins ¨C ÊÇ´ÓHudsonÖвð·Ö³öÀ´µÄ¡£

Ëæ»ú¹¤¾ß

ÎһὫÎÒ·¢ÏÖÓÐÓõŤ¾ß¼¯¼ÓÈë½øÀ´¡£

JRebel ¨C Awesome plugin to IntelliJ IDEAµÄÒ»¸öÏ൱°ôµÄ²å¼þ£¬ÆäËüIDEµÄ´úÂë¿ÉÒÔÖ§³ÖÈȲå°Î£¬»»¾ä»°Ëµ¾ÍÊÇ¿ÉÒÔ²»¾­¹ý±àÒë¾ÍÔËÐдúÂë¡£

YourKit ¨C Java·ÖÎöÆ÷

Õ¾ÔÚVisual StudioÓû§½Ç¶È¿´IntelliJ IDEA

ÕâÒѾ­±äΪ×Ô¼ºµÄÖ¸ÄÏ

ÔÚJVMÉϹ¤×÷

Õⲿ·ÖÃèÊöÁËJVMÉϵij£¼ûÇé¿ö¡£´ó¶àÊýÀý×ÓÊÇ»ùÓÚKotlinµÄµ«ÊÇÒ²¿ÉÒԱȽÏÈÝÒ×µØÊÊÓ¦ÆäËüÓïÑÔ¡£

Àà¼ÓÔØÆ÷

JVMÉϵÄÀà¼ÓÔØÆ÷¶ÔÓÚÕâÆªÖ¸Ä϶øÑÔ¹ýÓÚÅÓ´ó£¬ËùÒÔÎÒÖ»Ïë¼òµ¥½éÉÜһϡ£

ÔÚ.NETÖÐÓÐÒ»¸ö¼¯ºÏÀàÈ¥¼ÓÔØÆäËüÀà¡£ÔÚJVMÉÏÓµÓÐÀà¼ÓÔØÆ÷¡£Ëü²»»áÊǵ¥¸ö´æÔÚ£¬»»¾ä»°Ëµ£¬Àà¼ÓÔØÆ÷ÍùÍù¶àÓÚÒ»¸ö¡£
ÓÃÓÚÆô¶¯ÄãµÄÓ¦ÓóÌÐòµÄĬÈÏÀà¼ÓÔØÆ÷¿ÉÒÔͨ¹ýʹÓÃÀà¼ÓÔØÆ÷Öеķ½·¨getSystemClassLoader()£º

val classLoader = ClassLoader.getSystemClassLoader()

²»Òª³¢ÊÔÈ¥´´½¨Ò»¸öÀà¼ÓÔØÆ÷µÄʵÀý£¬ÒòΪËüÊÇÒ»¸ö³éÏóÀà¡£ÓÐһЩÀà¼ÓÔØÆ÷µÄʵÏÖ¾­³£Ê¹Óã¬ÆäÖÐÖ®Ò»¾ÍÊÇURLÀà¼ÓÔØÆ÷¡£

¹ØÓÚÀà¼ÓÔØÆ÷Ò»¸ö·Ç³£ÖØÒªµÄ¹ÛµãÊÇ£¬Ã¿¸öÀà¼ÓÔØÆ÷ÓÐÒ»¸öÖ¸Ïò¸¸Àà¼ÓÔØÆ÷µÄÊôÐÔ¡£

ÕâÊÇÈçºÎÓ°ÏìÀà¼ÓÔØÆ÷µÄÄØ£¿µ±Äã³¢ÊÔ¼ÓÔØÒ»¸öÀàʱ£¬JVMÊ×ÏȽ«»á³¢ÊÔ¼ÓÔØ¸¸Àà¡£Èç¹û¸¸À಻ÄܼÓÔØÕâ¸öÀ࣬ÄÇôÄã×Ô¼ºµÄÀà¼ÓÔØÆ÷¾Í»á½øÐмÓÔØ¡£

Àà¼ÓÔØÆ÷£¬°üÀ¨URLÀà¼ÓÔØÆ÷ÔÊÐíÄãÔÚ´´½¨ÊµÀýʱָ¶¨Ò»¸ö¿É¹©Ñ¡ÔñµÄ¸¸Àà¡£

Èç¹ûûÓб»×ÓÀàûÓн«Àà¼ÓÔØ³É¹¦£¬ÄÇôϵͳĬÈϵÄÀà¼ÓÔØÆ÷»á¸ù¾Ý¸ø¶¨µÄclasspathÀ´½øÐмÓÔØ²Ù×÷¡£

ͬʱ£¬JVMÖеÄÀàʶ±ðÓë.NETÖкÜÏàËÆ£¬ÄǾÍÒâζ×Å´Ó²»Í¬µÄÀà¼ÓÔØÆ÷ÖмÓÔØÏàͬµÄÀཫ³öÏÖ²»¼æÈݵÄÇé¿ö£¬¼´Ê¹ÊÇÔÚÏàͬµÄÁ´ÖÐÒ²ÊÇÈç´Ë¡£

´´½¨Äã×Ô¼ºµÄÀà¼ÓÔØÆ÷

Äã²»½ö¿ÉÒÔ´ÓClassLoaderÀàÖд´½¨Äã×Ô¼ºµÄÀà¼ÓÔØÆ÷£¬¶øÇÒÄãÒ²¿ÉÒԸıäĬÈϵÄÀà¼ÓÔØÆ÷£¬¶øÕâЩÔÚ.NET¼¸ºõ²»¿ÉÄÜ¡£

¹ØÓÚÀà¼ÓÔØÆ÷µÄ¸ü¶àÐÅÏ¢

¹ØÓÚÀà¼ÓÔØÆ÷µÄÎÄÕ·dz£¶à¡£ÕâÀïÓÐһЩÎÒÕÒµ½µÄ£º

Extensive tutorial on Class Loaders by Zeroturnaround

The Basics of Java Class Loaders

Ted Newards¡¯s Papers on Finding, Loading Classes and more

Oracle¡¯s Papers on Java Class Loading

½öʹÓÃGoogle¾Í¹»ÁË£¬ÒòΪͨ¹ýËü¿ÉÒÔÕÒµ½³ÉǧÉÏÍò¹ØÓÚ¸ÃÖ÷ÌâµÄ²©¿Í£¬ÎÄÕºÍÂÛÎÄ¡£

´Óµ±Ç°¶¯Ì¬Àà¼ÓÔØÄ£¿é

ÔÚ.NETÖУ¬ÏëÒª¼ÓÔØ´Óµ±Ç°ÅäÖÃÖмÓÔØÒ»¸öÀ࣬Äã¿ÉÒÔÕâÑù×ö£º

var assembly = Assembly.GetExecutingAssembly();
var loadedClass = assembly.GetType("Loader.Customer");

¼ÓÔØÆ÷Êǵ±Ç°Óû§ËùÔÚÃüÃû¿Õ¼äµÄ¼¯ºÏ¡£ÕâЩ¹¤×÷µÄÉúÃüÖÜÆÚºÍµ±Ç°¼¯ºÏµÄÀàÒ»Ö¡£

ÔÚJVMÖоÍÊÇ:

val classLoader = ClassLoader.getSystemClassLoader()
val loadedClass = classLoader?.loadClass("org.loader.Customer")

ÕâÊÇKotlinµÄÓ÷¨£¬Ëü±íʾ£¬Èç¹ûÀà¼ÓÔØÆ÷²»Îªnull£¬¾ÍÖ´ÐÐÕâ¸ö²Ù×÷¡£ËüÊÇÏÂÃæÐ´·¨µÄ¼ò»¯°æ£º

if (classLoader != null) {
        val loadedClass = classLoader.loadClass("org.loader.Customer")
}

´ÓÁíÒ»¸öÄ£¿éÖмÓÔØÀà

ÔÚ.NETÖУ¬Äã»áÕâô×ö£º

var assembly = Assembly.LoadFrom(@"C:\Folder\SampleModule.dll");
var loadedClass = assembly.GetType("SampleModule.Customer");

ÔÚJVMÉÏ£¬Äãͨ³£Ê¹ÓÃURLÀà¼ÓÔØÆ÷£¬½«URLÐòÁд«µÝ½øÈ¥£¬¶ø²»ÊÇ´«µÝÎļþ¼Ð¡£ ʹÓÃURLÀà¼ÓÔØÆ÷µÄºÃ´¦¾ÍÊÇÄã¿ÉÒÔ´Ó´ÅÅ̺ÍÍøÂçµÈµØ·½¼ÓÔØ¡£

Èç¹ûÄãµÄÀà×÷Ϊһ¸öJAR´ò°ü,ÄÇôÄã¿ÉÒÔÕâô¶¨ÒåJARÎļþÃû:

val url = URL("file:///path-to-folder/sampleModule.jar")
 
val urls = array(url)
 
val classLoader = URLClassLoader.newInstance(urls)
 
val loadedClass = classLoader?.loadClass("org.sampleModule.Customer")

ÄãÍêÈ«¿ÉÒÔʹÓÃÎļþ¶ø²»ÊÇURL£¬Í¬Ê±Ö¸ÏòÒ»¸öÎļþ£¬Õâ¸ü¼ÓÆÕ±é£¬µ«Ö®ºóÄãÐèÒª½«ÎļþתΪURL:

val file = File("/path-to-folder/sampleModule.jar")
 
val url = file.toURI().toURL()

Èç¹ûÄãµÄÀàÔÚÎļþ¼ÐÖÐÒÔµ¥¶ÀµÄ.classÎļþÐÎʽ´æÔÚ£¬ÄãÒªÖ¸¶¨Îļþ¼ÐÃû£º

val url = URL("file:///path-to-root-folder/")
 
val urls = array(url)
 
val classLoader = URLClassLoader.newInstance(urls)
 
val loadedClass = classLoader?.loadClass("org.sampleModule.Customer")

ΪʲôÎÒûÓгõʼ»¯URLÀà¼ÓÔØÆ÷£¬¶øÊ¹ÓÃnewInstance·½·¨£¿ÏÔÈ»ËüµÄºÃ´¦¾ÍÊÇÈç¹û×°ÓÐSecurity ManagerµÄ»°¾ÍÄܵ÷ÓÃsecurityManager.checkPackageAccess·½·¨¡£

ÔÚʹÓÃĿ¼ʱÒÔÏÂÁ½µã¶ÔÓÚ½â¾öÄãµÄÎÊÌâ·Ç³£ÖØÒª£º£¨²»ÊÇJARÎļþ£©£º

È·±£Äã´«µÝµÄURL»òÎļþµÄºó׺ÕýÈ·¡£

È·±£ÄãÔÚ¸ùÎļþ¼ÐÏ£¬ÄÇÒâζ×ÅÊ²Ã´ÄØ£¿µ±Äã±àÒëorg.sampleModule.CustomerÕâ¸öÀàʱ£¬Ëü²úÉúÁËÒ»¸öÊä³ö£ºoutput-root-folder/org/sampleModule/Customer.class

¡°.¡±Ìæ»»³ÉÁË¡°/¡±¡£ÕâÒâζ×ÅURL¼ÓÔØÆ÷ÆÚÍûÄãÖ¸Ïò¸ùÎļþ¼Ð£¬¶ø²»ÊÇÃüÃû¿Õ¼ä¿ªÊ¼µÄµØ·½¡£loadClass·½·¨²ÅÐèÒªÌṩÍêÕûµÄÃüÃû¿Õ¼ä¡£

¸Ðл@orangy°ïÖúÎÒ½â¾öÕâ¸öÂé·³¡£

»áÒé

½üÄêÀ´¼´Ê¹ÎÒ²»½øÐиü¶àµÄJava¿ª·¢£¬µ«ÊÇÎÒÒ»Ö±ÔڲμÓÓйØJavaµÄ»áÒé¡£ ÕâÀïÓÐһЩÎҲμӻáÒéºóÈÏΪ±È½Ï²»´íµÄ½¨ÒéºÍ¸ÐÊÜ£º

Devoxx ¨C ×î´óµÄ°æ±¾ÔÚ°²ÌØÎÀÆÕ£¬µ«ÏÖÔÚÔÚ·¨¹úºÍÓ¢¹ú¡£

JAX ¨C µÂ¹úµÄÒ»¸ö³¤ÆÚ´óÐÍ»áÒ顣һȺˮƽÏ൱µÄÈ˵ĻáÒé!

JavaZone ¨C ÕâÏñÊÇûÓÐJavaµÄ¿ª·¢Õ߻ᡣµ«ÊÇÖ÷Òª¼¯ÖÐÔÚŲÍþ¡£

JavaOne ¨C ÆÄ¾ß¹æÄ£¡£ËüÊÇJavaÁìÓòµÄ¼¼Êõ´ó»á¡£

ÕâÀïÒ²ÓÐÐí¶à¹ØÓÚ¡°¿çƽ̨¡±µÄ»áÒéNDC£¬QCon£¬YOW!£¬GOTO£¬µÈµÈ¡£

±ä¸üÈÕÖ¾

Ö¸Äϱä¸ü¼Ç¼¡£

ÈÕÆÚ ±ä¸ü

2013Äê12ÔÂ30ÈÕ ¸üÐÂÁËJavaFXÃèÊö¡£×·¼Ó¡°¸ü¸ÄÈÕÖ¾¡±²¿·Ö

2014Äê01ÔÂ06ÈÕ ¸üÐÂÁ˱êÌâ²¢Çҹ̶¨Ìí¼ÓÁËIntelliJ IDEAÖ¸ÄϵÄÁ´½Ó

2014Äê01ÔÂ09ÈÕ ×·¼ÓÁËÀà¼ÓÔØ²¿·Ö

   
´Îä¯ÀÀ       
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö


Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ