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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
OSGi Bundle Convert²å¼þÔ­Àí
 
×÷Õß wzumathµÄ²©¿Í£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-09-17
  2387  次浏览      27
 

1.ÒýÑÔ

ÆÕͨµÄwebÓ¦ÓÃҪת»»ÎªOSGiÓ¦Ó㬾­³£»áÓöµ½Ó¦ÓÃÖÐÒÀÀµµÄJarÊǷDZê×¼µÄÇé¿ö£¬ÕâЩJar¿ÉÄÜÖ»×ñÊØÁ˲¿·ÖOSGi¹æ·¶£¬ÉõÖÁManifestÐÅÏ¢Êǿյġ£ÕâÖÖÇé¿öÔÚOSGi Ó¦ÓÃÖиù±¾ÎÞ·¨Ê¹ÓÃÕâ¸ö·Ç±ê×¼µÄJar×öΪBundle£¬¹Ê±ØÐëÒª½«Õâ¸ö·Ç±ê×¼µÄJarת»»³É×ñÊØOSGi¹æ·¶µÄBundle¡£ÁíÍâÓÃMaven¹ÜÀíµÄ²Ö¿â£¬ÓÉÓÚ²»Í¬¿ª·¢Õ߶Թ淶µÄÀí½â²»Í¬£¬ÔÚ²Ö¿âÖÐÒ²´æÔÚÁ˸÷Öֹ淶»òÕß²»¹æ·¶µÄJar£¬Èç¹ûÎÒÃÇÄܺܺõĽ«Maven²Ö¿âÖеÄJarת»»³É±ê×¼µÄBundle£¬Maven²Ö¿âÒ²¾Íת»»³É¶ÔÓ¦µÄOSGi Bundle²Ö¿â£¬¶ÔÓÚ·ÇOSGiµÄÓ¦ÓöøÑÔÒ²¾Í¿ÉÒԺܷ½±ãµÄÀûÓÃMaven²Ö¿â£¬ÆÕͨwebÓ¦ÓÃÒ²¿ÉÒÔÆ½»¬µÄÇл»µ½OSGi»·¾³¡£

2.ת»»BundleµÄ·½Ê½

Òª½«·Ç±ê×¼µÄJarת»»³ÉOSGi Bundle£¬×îºËÐĵÄÒ²¾ÍÊÇÈçºÎ½«BundleÖеÄImport-PackageºÍExport-PackageÄÚÈÝÖØÐ´£¬¶Ô´Ëת»»BunldeµÄ·½Ê½¿É»®·ÖΪ3ÖÖ·½Ê½£º1.¹Ì¶¨°æ±¾·½Ê½×ª»»£»2.·Ç¹Ì¶¨°æ±¾·½Ê½×ª»»£»3.¹Ì¶¨°æ±¾ºÍ·Ç¹Ì¶¨°æ±¾»ìºÏʹÓ÷½Ê½×ª»»£»

2.1¹Ì¶¨°æ±¾·½Ê½

Ö÷ÒªÒÀ¾ÝJar¶ÔÓ¦pomÒÀÀµÊ÷(mvn dependency:tree)½øÐÐת»»£¬¶ø¶ÔÓÚpomÖÐÎÞ·¨È·¶¨µÄ°æ±¾£¬ÔòÐèÒªÒÀ¿¿BundleÄ£¿épomµÄÒÀÀµÖÙ²ÃÀ´Ç¿ÖÆÑ¡ÔñÒ»¸ö°æ±¾£¬ÕâÖÖÇé¿ö×îÖÕת»»ºÃµÄBundle Import-PackageºÍExport-PackageÊǹ̶¨°æ±¾µÄ£»¹Ì¶¨°æ±¾·½Ê½×ª»»ÓеãÀàËÆÓÚmavenÖеÄJar°æ±¾Ç¿ÒÀÀµ£¬Õâ¸öBundle±ØÐëimportÖ¸¶¨µÄ¹Ì¶¨°æ±¾Bundle£¬ÕâÑù×öµÄÄ¿µÄÒ²ÔÚÓÚʹµÃת»»ºóµÄÿ¸öBundleÒÀÀµ»·¾³ÊÇÒ»¸ö¶ÀÁ¢µÄ¼¯ºÏ£¬¶øÇÒ¼¯ºÏÖ®¼äûÓÐÈκγåÍ»¿ÉÑÔ¡£

2.2·Ç¹Ì¶¨°æ±¾·½Ê½>

ÒÀ¾ÝJarÎļþÖÐ*.classµÄpackageºÍimport packageÐÅϢת»»£¬×îÖÕת»»ºóµÄBundle²»Ö¸¶¨Import-Package°æ±¾ºÍExport-Package°æ±¾£»ÕâÖÖÇé¿öÒ²¾ÍÊÇĿǰ¾­³£ÓõIJ»Ö¸¶¨°æ±¾·¶Î§»òÕßÎÞ°æ±¾package£¬ÌرðÊÇÎÞ°æ±¾package£¬ÔÚOSGi»·¾³ÖУ¬½«»áʹÓÃVerison>=0.0.0µÄ·½Ê½Ñ¡ÔñBundle£¬Ö»Òª×îа汾¿ÉÓ㬾ͻáʹÓÃ×îÐÂ°æ±¾Ìæ»»Ð»·¾³¡£

2.3¹Ì¶¨°æ±¾ºÍ·Ç¹Ì¶¨°æ±¾»ìºÏʹÓ÷½Ê½

ÒÀ¾ÝpomÒÀÀµÊ÷ת»»£¬Óöµ½ÎÞ·¨×ª»»µÄ°æ±¾²»¼ÌÐø´¦Àí£¬×îÖÕת»»ºóµÄBunldeÖÐImport-PackageºÍExport-Package»á´æÔڹ̶¨ÒÀÀµ°æ±¾¡¢ÎÞ°æ±¾ÐÅÏ¢»òÕß°æ±¾Çø¼ä¡£Àý£º

Import-Package: org.apache.commons.collections.comparators;version="[3.2.0,3.2.0]
",org.apache.commons.collections.keyvalue;version="[3.2.0,3.2.0]
",org.apache.commons.collections.list;version="[3.0.0,3.2.0]
",org.apache.commons.collections.set;version="[3.0.0,3.2.0]
",org.apache.commons.logging

3.maven-bundle-plugin²å¼þת»»µÄBundle

ͨ³£OSGi»·¾³µÄ¿ª·¢Ïà¶Ô±È½Ï¸´ÔÓ£¬´ÓÉÏÃæÒ²¿ÉÒÔ¿´³ö¶ÔÓÚBundleµÄת»»¸ü¼Ó¸´ÔÓ£¬ÓÚÊÇÒµ½çÓÐÌṩÕâÑùµÄMaven²å¼þmaven-bundle-plugin£¨¾ßÌå¼û²Î¿¼×ÊÁÏ[1]£©À´×öÕâ¸öÊÂÇ飬Ëù²ÉÓõÄת»»·½Ê½ÕýºÃÊǹ̶¨°æ±¾ºÍ·Ç¹Ì¶¨°æ±¾»ìºÏʹÓ÷½Ê½¡£

Æäʵmaven-bundle-pluginÊÇʹÓÃbnd²å¼þÍê³É¶ÔBundleµÄת»»¡£Õâ¸öMaven²å¼þ¶ÔÓÚBundleµÄת»»Ö÷ҪʹÓÃasm½âÎö£¬¶ÁÈ¡JarÎļþÖеÄclassÎļþ×Ö½ÚÂëÐÅÏ¢£¬½âÎöclassÎļþÖеÄpackageºÍimport packageÐÅÏ¢£¬×îºó·ÖÎöÖØÐ´Manifest.MFµÄImport-PackageºÍExport-Package¡£

ÕâÖÖģʽÔÚÒ»¸ö¶ÀÁ¢ÏîÄ¿ÖÐʹÓ㬿ÉÄܲ»»á´æÔÚʲô´óÎÊÌ⣬µ«ÊÇÕâ¸öMaven²å¼þת»»ºóµÄBundleÎÞ·¨ºÜºÃ´¦Àí¼¸ÖÖÌØÊâÓ¦Óó¡¾°£¬ÏÂÃæ´ÓOSGi BundleµÄ2ÖÖÒÀÀµÇé¿öÀ´Ïêϸ·ÖÎöϲÉÓÃÕâÖÖת»»Ä£Ê½×ª»»ºóµÄBundleÎÊÌâ¡£

3.1ת»»Îª¹Ì¶¨°æ±¾ÒÀÀµ

£¨Í¼1£©

Èçͼ1Ëùʾ£¬¼ÙÈçÊǶàÈ˶ಿÃÅЭ×÷¿ª·¢µÄ»·¾³£¬ÄÇô¾ÍºÜÓпÉÄܲ»Í¬BundleÊÇÓɲ»Í¬¿ª·¢½ÇÉ«¿ª·¢µÄ£¬ÕâʱºòBundleA1.0.0ÒªÇó˵±ØÐëʹÓÃBundleA1 1.0.1£¬BundleB 1.0.0ÒªÇó˵±ØÐëʹÓÃBundleA1 1.0.0¡£µ«ÊÇ£¬ËûÃÇËùÒÀÀµµÄBundleA1µÄÊdzåÍ»µÄ£¬ËùÒÔÕâʱÐèÒªÖ¸¶¨BundleAºÍBundleBÒÀÀµ¸÷×Ô¶ÔÓ¦°æ±¾µÄBundleA1À´½â¾ö£¬´Ëʱ2¸öBundleA1ͬʱÔÚÒ»¸öÓ¦Óû·¾³ÖдæÔÚ²¢Í¬Ê±Ìṩ·þÎñ£¬¹Ì¶¨°æ±¾·½Ê½µÄBundleÒÀÀµºÜºÃ½â¾öÁ˳åÍ»ÎÊÌâ¡£²»¹ýÕâÖÖÇé¿öÏ£¬BundleAºÍBundleBͬʱ´æÔÚ»áÔì³É2¸öBundleÖ®¼äͨÐųöÏÖÎÊÌ⣬ÕâÊÇÓÉÓÚͬһ¸öÀࣨBundleA1ÖеÄÀࣩ½øÐÐÀàÐÍת»»Ê±»áÒòΪclassLoader²»Í¬¶øÔì³ÉClassCastExceptionÒì³£¡£ÔÚµÚ4½Ú¡°²å¼þµÄ¸Ä½ø¡±Öн«»áÏêϸÃèÊöÈçºÎ½â¾ö¹Ì¶¨°æ±¾Ä£Ê½³öÏÖµÄÎÊÌâ¡£

3.2 ת»»Îª·Ç¹Ì¶¨°æ±¾ÒÀÀµ

£¨Í¼2£©

ÔÚ¶àÈËЭ×÷¿ª·¢»òÕß·Ö²¼Ê½Ó¦Óû·¾³ÖУ¬Èç¹ûBundleAºÍBundleB²»Ö¸¶¨ÒÀÀµµÄBundleA1°æ±¾£¬ÄÇôÔÚOSGiÓ¦Óû·¾³ÖУ¬Ó¦ÓûáʹÓÃverison>=0.0.0µÄ·½Ê½Ñ¡ÔñBundle£¬Ö»Òª×îа汾µÄBundle¿ÉÓ㬾ͻáʹÓÃ×îа汾¸üл·¾³¡£Èçͼ2Ëùʾ£¬BundleA 1.0.0 ºÍBundleB 1.0.0¾ùÑ¡ÔñÁË×îа汾µÄBundleA1 1.0.1°²×°£¬¼ÙÈçBundleA1ÌṩÁË1.0.0ºÍ1.0.1£¬¶øÇÒÕâ2¸ö°æ±¾ÊdzåÍ»µÄ¡£BundleB 1.0.0»áÒªÇó±ØÐëʹÓÃBundleA1 1.0.0£¬ÕâʱºòµÄÓ¦Óû·¾³¾Í³ÉÁËͼ2ÕâÖÖÇé¿ö£¬»áÔì³É×îºó°²×°µÄBundleA1»·¾³²»Îȶ¨£¬µ¼Ö BundleB 1.0.0¹¦ÄܳöÎÊÌâ¡£·´Ö®£¬Ê¹ÓÃBundleA1 1.0.0£¬ÄÇôBundleA½«»á³öÏÖÎÊÌâ¡£ maven-bundle-plugin²å¼þ¶ÔÓÚ·Ç×ñÊØOSGi¹æ·¶µÄJarת»»´ó¶à¶¼»áÕâÖÖÐÎʽ£¬Òò´ËÔÚOSGiÓ¦Óû·¾³¿ª·¢¹ý³ÌÖо¡Á¿Ê¹Óù̶¨°æ±¾·½Ê½£¬ËäÈ»ÕâÖÖÇé¿öµÄ¿ª·¢Ïà¶ÔÀ§ÄÑЩ£¬µ«ÊǸĽøºÃ²å¼þ»¹ÊÇÄܹ»ºÜºÃµÄ°ïÖúÎÒÃǹæ±ÜµôÒÔºóά»¤¹Ì¶¨°æ±¾µÄ¹¤×÷Á¿£¬¶øÇÒÄܸ¨ÖúÎÒÃǺܺõĶ¨Î»BundleÒÀÀµ³öÏÖµÄÎÊÌâ¡£

3.3²å¼þµÄ¹¦ÄÜÎÊÌâ

Èç¹ûҪת»»µÄJar±¾ÉíÊÇOSGi Bundle£¬¶øÇÒMANIFEST.MFµÄImport-PackageÖдæÔÚÄÚÈÝ£¬Ô­ÏÈMavenµÄmaven-bundle-plugin²å¼þÔò»á¼ÌÐøÊ¹ÓøÃImport-Package¡£µ±È»Import-PackageµÄÄÚÈÝ»áÓöµ½Ò»Ð©²»¹æ·¶µÄ°æ±¾£¬ÌرðÊÇ´Óδ½Ó´¥µÄ¿ª·¢ÈËÔ±£¬Ä£·Â×Åд£¬Import-PackageдµÄÓÐЩÎÊÌ⣬ÒÀÀµÐÅÏ¢´íÁË£¬ÉõÖÁÓÉÓÚ¿ª·¢ÈËÔ±ÊèºöдÁËЩ´íÎó°æ±¾£¬ÕâʱºòÐèÒªÎÒÃÇÈ¥ÐÞÕýΪÕýÈ·µÄÐÅÏ¢£¬Í¬ÀíExport-PackageÒ²´æÔÚͬÑùµÄÎÊÌâ¡£

ÁíÍâMANIFEST.MFÖÐûÓÐImport-PackageÄÚÈÝʱ£ºmaven-bundle-pluginÀûÓÃasmÀ´½âÎö*.classÎļþÀïimport packageÀ´ÌáÈ¡£¬ÌáÈ¡·½Ê½ÈçÏÂËùʾ£º

£¨Í¼3£©

ͼ3 BunldeAÖÐÖ»ÓÐÕâ¸öÀ࣬ÄÇôBundleAµÄImport-PackageΪjava.lang.reflect,org.objectweb.asm,com.wzucxd.classloader¡£

¿ÉÒÔ¿´³öÕâÖÖÓÉmaven-bundle-plugin²å¼þת»»µÄ°æ±¾ÐÅÏ¢¶ªÊ§ºÜÃ÷ÏÔ£¬ÔÙÔòÓÉÓÚbnd¸ù¾Ýmaven pomÒÀÀµ½øÐÐת»»£¬Èç¹ûpomÖÐÓÐexclusionsд·¨£¬ÄÇôµ±×ª»»Bundle¹ý³ÌÖУ¬ÈÏΪÕâ¸öBundle packageÒÀÀµÊDz»ÐèÒªµÄ£¬Import-Package»áÈ¥³ýÕâ¸öpackage£¬¶ÔÓÚËùÒÀÀµµÄBundleÀ´Ëµ¿ÉÄÜ»áÔì³Édeployʧ°Ü¡£ÈçBundleA1.0.0ÒÀÀµµÄBundleA1 1.0.1ÐèÒªcom.wzucxd.classloaderÕâ¸öpackage£¬µ«ÊÇÓÉÓÚÔÚBundleA1.0.0µÄpomÖаÑBundleA1 1.0.1¶ÔÓ¦µÄcom.wzucxd.classloader package exclusion³öÈ¥ÁË£¬¶øBundleA1.0.0µÄpackageÖÐimport½øÀ´£¬ÕâÖÖÇé¿ö¾ÍÓпÉÄÜÔì³ÉBundleA1 1.0.1 deployʧ°ÜÁË¡£

×ÜÖ®£¬maven-bundle-plugin²å¼þת»»ºóµÄBundle£¬ÔÚÓ¦ÓÃÔËÐйý³ÌÖÐ»á´æÔÚµÄÉÏÊöÎÊÌ⣬¹Ê¿ÉÒÔÕë¶ÔÕ⼸¸ö¸Ä½ø´ëÊ©À´ÃÖ²¹²å¼þµÄ²»×㣺

ÔÊÐíΪËùÓÐpackageÇ¿ÖÆÖ¸¶¨¹Ì¶¨°æ±¾

ÐÞÕýOSGi Bundle JarÖв»ÕýÈ·µÄImport-PackageºÍExport-Package

½â¾öexclusionsµÈÇé¿öµÄ°æ±¾¶ªÊ§ÎÊÌâ

½â¾ö¿ÉÑ¡°æ±¾ÎÊÌ⣬ÕýȷʹÓÃresolution:=optional

4.²å¼þµÄ¸Ä½ø

´ÓMaven²å¼þµÄ²»×ãÖУ¬ÎÒÃÇÒ²¿´µ½Á˺ËÐÄÎÊÌâÔÚÓÚ¸ÃÈçºÎ½â¾öÈ«²¿²ÉÓù̶¨°æ±¾BundleÒÀÀµÊ±µÄת»»ÎÊÌâ¡£Õë¶Ôͼ1¹Ì¶¨°æ±¾ÒÀÀµÕâ¸öÎÊÌ⣬ÎÒÃÇ¿ÉÒÔ½«³åÍ»Àà·Åµ½bootdetegationÖУ¬µ«ÊÇÕâÖÖ½â¾ö·½Ê½²»½¨Ò飬ÕâÑù×öÒ²¾Í°ÑÕâ¸öÀàÈÃWebAppClassLoder¼ÓÔØÁË£¬ÈÃÓ¦Ó÷½È¥½â¾ömaven³åÍ»£¬ËùÓÐBundleÖеÄÕâÖÖ³åÍ»¶¼»áÐèÒª½â¾ö£¬ÏÔÈ»ÕâÑù²»ÊÇÒ»¸öºÃ·½Ê½£¬ÕâÑù¾Í»Øµ½ÁËԭʼÉç»á¡£µ«ÊÇÎÒÃÇ¿ÉÒÔ²ÉÓù̶¨°æ±¾·½Ê½½áºÏextraģʽ£¬ÕâÑù¿ÉÒԺܺõĽâ¾öÕâ¸öBundle½»»¥ÎÊÌ⣬½«ËùÓÐBunlde×ö³É¹Ì¶¨°æ±¾µÄImport-Packageµ½extraÖУ¬extraÖÐÖ¸¶¨µÄ°æ±¾»áÓüÓÔØOSGi FrameworkµÄclassloader¼ÓÔØ£¬¾ßÌå¿ÉÒÔ¿´Ï²ο¼×ÊÁÏ[2]ÀïµÄÄÚÈÝ£¬ÕâÖÖ·½Ê½±ÜÃâÁË´óÁ¿Ê¹ÓÃbootdelegationÀ´½â¾öÀàÐÍת»»ÎÊÌâ¡£

Òò´ËÏÂÃæ½«¾ßÌå½éÉÜÈçºÎת»»¹Ì¶¨°æ±¾Import-PackageºÍExport-PackageµÄ·½·¨¡£

4.1 Export-Packageת»»

£¨Í¼4£©

´ÓÉÏÃæ×ܽáÏÂÀ´£¬¶ÔÓÚExport-PackageÖеÄpackage°æ±¾ÐÞÕý£¬Óöµ½Ã»ÓÐʹÓð汾»òÕß´íÎóÐÅÏ¢µÄpackageʱ¿ÉÒÔÑ¡ÔñÖ¸¶¨³Éµ±Ç°×ª»»JarµÄpom version¡£

´¦Àí·½·¨£º

ת»»¹ý³Ì¿É²ÉÓúóÐò±éÀú·½Ê½Öð¼¶×ª»»Jar£¬Èçͼ4Ëùʾ£¬Öð¼¶×ª»»asm-all,org.apache.felix.ipojo.metadata->org.apache.felix.ipojo¡£

½«JarÖÐËùÓеÄpackageÌáÈ¡³öÀ´

¼ÌÐø°ÑMANIFEST.MFÖеÄPrivate-PackageµÄpackageÐÅÏ¢ÊÕ¼¯ÆðÀ´¡£

ÁíÍâÔÚBndÖУ¬¶ÔÓ¦ÏÂÃæµÄ´úÂë¿ÉÓÃÀ´»ñÈ¡µ±Ç°JarµÄËùÓÐpackage£¬µ«ÊÇÕâ¸öpackageÊǰüº¬Private-PackageµÄ£º

£¨Í¼5£©

×îºó½«ÕâЩpackages ¼õÈ¥Private-Package£¬²¢´øÓе±Ç°×ª»»JarµÄversionµÄÄÚÈÝ×÷ΪExport-Package¡£

½âÎöµ±Ç°JarÎļþ¶ÔÓ¦µÄpomÎļþ£¬ÓÃpom version¸²¸ÇµôÔ­ÏȵÄversionÖµ£¬ÈÃËùÓÐExport-PackageµÄversion¶ÔÓ¦¾ßÌåʵ¼ÊʹÓõİ汾¡£
ÖØÐÂÉú³ÉµÄExport-PackageºÍMANIFEST.MFÎļþÖÐÔ­ÏȵÄExport-PackageÊý¾ÝÕâÕâ¸öʱºò½øÐкϲ¢£¬ÓÚÊÇ×îÖÕ¶ÔÓ¦µÄversionÖµ¶¼»á¸Ä³ÉºÍ¸ÃJar¶ÔÓ¦µÄ°æ±¾¡£

Èçgriffin.core.module:1.0.5µÄExport-Package:

£¨Í¼6£©

´¦Àíºó»¹´æÔÚÎÞ°æ±¾µÄpackage£¬Ôò´ÓExport-PackageÖÐÈ¥³ý£¬ÒòΪÕâÖÖÇé¿öµÄpackage²¢²»ÊÇËû×Ô¼ºÌṩµÄ£¬ÊÇÓÉÓÚԭʼµÄOSGi Bundle JarдµÄ²»¹æ·¶

usesÓï·¨µÄʹÓãº

ת»»ºóµÄBundleÔÚʹÓùý³ÌÖУ¬ÓÐʱ»áÓöµ½Ò»¸öÎÊÌ⣺interfaceÀàÖÐʹÓÃÁËÆäËûpackageµÄÀ࣬¶øÕâ¸öinterfaceÀàÔÚʵÏÖÀàÐ͵ÄBundleÖÐȴûÓÐʹÓõ½¡£

ÈçÏÂͼ7ºÍͼ8ÖеÄTemplateEngine interface£¨½Ó¿ÚBundleÄÚ£©ºÍHelloImplÀࣨʵÏÖBundleÄÚ£©£¬ÔÚHelloImplÀàÖÐimportÁËcom.wzucxd.griffin.core.module.engine.TemplateEngine½Ó¿Ú£¬µ«ÊDz»Ê¹ÓÃTemplateEngine½Ó¿Ú¡£ÕâʱºòʵÏÖµÄBundle½«»áÉú³ÉExport-Package£ºcom.wzucxd.griffin.core.module.engine;uses:=com.wzucxd.griffin.core.module.context;version="1.0.5"

±íʾcom.wzucxd.griffin.core.module.engineÕâ¸öpackageҪʹÓõÄʱºò£¬±ØÐëÏÈinstall°üº¬com.wzucxd.griffin.core.module.context packageµÄBundle;ÕâÑù×öµÄÄ¿µÄÒ²ÊÇΪÁËÈÃBundleÒÀÀµÄܹ»¸ü¼ÓÍêÕûЩ¡£

£¨Í¼7£©

£¨Í¼8£©

4.2 Import-Packageת»»

¶ÔÓÚImport-PackageµÄת»»ÒªÇó¸üΪÑϸñ£¬±ØÐëÒªÔÚExport-Packageת»»ºóÔÙ½øÐÐת»»£¬ÒòΪImport-PackageµÄÄÚÈݱØÐëÊDZ»Export¹ýµÄpackage¡£

ת»»·½·¨£º

ʹÓÃ4.1µÄ·½Ê½×ª»»ºÃExport-Package

µÚ1´ÎºóÐò±éÀú£¬×ª»»Ê±ºòÏȺóÐò±éÀúת»»ËùÓеÄJar£¬(maven dependency:tree¿ÉÒÔ²ÎÕÕmavenµÄDependencyTreeBuilderʵÏÖ£©;
ת»»Jarʱ£¬¶ÁÈ¡¸ÃJarÀïËùÓÐjavaÎļþµÄ×Ö½ÚÂ룬·ÖÎöclassÎļþÖеÄimportÄÚÈÝ£¬½«ËùÓÐimportÄÚÈÝÌáÈ¡³öÀ´¡£²¢¼Ç¼ÏÂËùÓÐÒÀÀµÊ÷ÀïµÄpackageºÍJar versionÐÅÏ¢£¬ÎªV1<package,version> map¼¯ºÏ¡£

ÔÚËùÓÐJarת»»Íê³Éºó£¬½«×ª»»Íê³ÉºóµÄV1<package,version>ÓëµÚ1²½Export-Packageת»»Íê³Éºó¼Ç¼µÄpackage versionºÏ²¢ÎªV2<package,version>

µÚ2´ÎºóÐò±éÀú£¬½«Import-packageµÄ°æ±¾ÐÅÏ¢ÓõÚ2²½ºÏ²¢µÄV2<package,version>Êý¾Ý½øÐÐÖØÐ´¡£ÕâʱºòÕý³£À´Ëµ°æ±¾ÐÅÏ¢ÒѾ­È«²¿Îª¹Ì¶¨°æ±¾ÐÅÏ¢¡£

resolution:=optionalµÄʹÓãº

µÚ2´Îת»»ÖлáÓöµ½Ò»Ð©Òì³£Çé¿ö£¬ÀýÈçÓöµ½Ô­ÏÈûÓа汾£¬µ«ÊÇÕâ¸ö°æ±¾ÔÚmavenÖÙ²ÃÖÐÓж¨Ò壬ÄÇô¿ÉʹÓÃmavenÖٲõİ汾×÷Ϊ¹Ì¶¨°æ±¾£¬ÕâÖÖÇé¿öÐèÒª¼ÓÉÏresolution:=optional;ת»»Ê±Óöµ½mavenÖٲúóÒ²ÎÞ°æ±¾µÄ£¬Ò²¾ÍÊÇ˵Õâ¸öpackageÎÞ¶¨Ò壬ÔÚÕâ¸öBundle»·¾³ÖÐÊǶÀÁ¢µÄ£¬ÄÇôÕâ¸öÐÅÏ¢¿ÉÄÜÊÇPrivate-Package»òÕßÔ­ÏÈÊÇOSGi BundleÖдíÎóµÄImport£¬Ã»ÓÐÈκÎÒâÒ壬ÕâÖÖPackageÈ¥³ýµô,µ±È»Ò²¿ÉÒÔʹÓÃresolution:=optional;±íʾÕâ¸öpackageÔÚinstallµÄʱºòÊÇ¿ÉÑ¡µÄ£¬Ó¦ÓÃÕæÕýÐèÒªµÄʱºòÔÙÈ¥install¡£

ÁíÍâÓÉÓÚÊǸù¾Ýpomת»»Bundle£¬¹ÊÓöµ½pomÖк¬ÓÐÕ⼸ÖÖÅäÖÃʱҲҪÓÃresolution:=optional£ºoptional¡¢exclude jar¡¢exclude javaÀàÐ͵ÄÅäÖá£ÒòΪÔÚÕ⼸ÖÖÇé¿öÏÂת»»Bundle£¬ÊDz»¿ÉÄÜÖªµÀʹÓõÄImport-Package°æ±¾£¬°æ±¾ÐÅÏ¢Ö»ÓÐÔÚmavenÖٲúó²ÅÖªµÀ£¨Ò²ÓпÉÄÜÊÇ¿ª·¢Õß×îºó¾ßÌåÖ¸¶¨Ê¹Óõİ汾£©£¬µ±Ç°ÄãÒ²¿ÉÒÔ²»Ð´°æ±¾ÐÅÏ¢£¬µ«ÊÇÕâÑù²»½¨Òé¡£resolution:=optionalʹÓúÍExport-PackageÖеÄuseÓеãÀàËÆ£¬ÓÐЩjar²ÉÓÃspi·½Ê½¿ª·¢£¬Ö»¶¨ÒåÁ˽ӿڣ¬µ«ÊÇʵÏÖÓɾßÌåµÄjarÀ´×ö£¬ÊµÏÖµÄjar¿ÉÒÔÓжà¸ö£¬Èçcommon.logging,¿ÉÒÔÓжà¸ölogÈÕ־ϵͳ£¬ÄÇôÕâ¸ö½Ó¿ÚʹÓñØÐë¶¼import½øÈ¥£¬¾ßÌåʹÓÃÄĸöÓÉÓ¦ÓÃÀ´¾ö¶¨¡£

Àýnet.sf.json-lib_2.2.0µÄMANIFEST.MF

ÔÚÕâÀï¿ÉÒÔ¿´µ½org.apache.oro.text.regex;resolution:=optional;version="[0.0.0,0.0.0]"£¬ÕâÀïµÄresolution:=optional;Ó÷¨±íʾÕâ¸öpackageÊǷDZØÐëµÄÒÀÀµ£¬¿ÉÓÐÒ²ÎÞ£¬Ö»ÓÐÐèҪʹÓõÄʱºò²Åinstall£¬µ±Ó¦ÓÃÖÐʹÓÃÓÐexportÕâ¸öpackageµÄBundleʱ£¬ÄÇô»áÌáǰinstallÕâ¸öÒÀÀµBundle£¬¶øÇÒÉÙÕâ¸öpackageµÄʱºòÒ²¿ÉÒÔinstall net.sf.json-lib¡£

4.3 OSGi Bundleת»»²å¼þʹÓÃÉè¼Æ

Õâ´ÎÎÒÃÇ´ÓConvert²å¼þʹÓÃÉÏÀ´¿´¿´£¬´ó¶à¶¼»áÒÔʲôϰ¹ßȥʹÓÃConvert²å¼þ£º

1.ÔÚpomÖÐÖ¸¶¨<packaging>bundle</packaging>

2.ÒýÈëplugin£¨Èçͼ9£©

£¨Í¼9£©

×¢£ºInstructionsÖпÉÑ¡ÊôÐÔÓÐ

Private-Package£º½«ÐèҪʹÓõÄpackageÄÚÈÝÈ«²¿´ò°üµ½BundleÖУ¬Ë½ÓÐpackageµÄÄÚÈÝÓÉBundle×ÔÉíµÄclassloader¼ÓÔØ£¬µ«ÊDz»½¨ÒéʹÓã¬ÈÝÒ׳öÏÖ±»Ö¸¶¨µÄpackageÔÚWebAppClassloader¼ÓÔØ¹ý
Import-Package£ºÖ¸¶¨bundleµÄimport£¬importÈç¹ûдÃ÷¾ßÌå°æ±¾£¬¸ñʽΪ<Import-Package> xxx.xxx.xxx;version="[1.0.0,1.0.0]", xxx.xxx.xxx;version="[xxx,xxx]"</Import-Package>£¬½«Õâ¸öImport-PackageÐÅÏ¢¸²¸Çbnd²å¼þת»»ºóµÄImport-Package
Export-Package:¶ÔÍⱩ¶µÄpackage£¬¿É±»ÆäËûbundle importʹÓã¬Export-PackageµÄËùÓÐpackage±ØÐë´ø°æ±¾£¬¶øÇÒ½¨ÒéºÍpomµÄ°æ±¾Ò»Ö£¬°æ±¾Ò²¿ÉÒÔ×Ô¼ºÖ¸¶¨

Ignore-Package:ÕâÀïµÄIgnore-Package×÷Óãº×ª»»µÄʱºò¹ýÂ˵ôÕâЩpackageÐÅÏ¢£¬ÔÚËùÓÐBundleת»»Ö®Ç°£¬¿ÉÒÔÌáǰÅäÖÃÁËÒ»¸öbnd.propertiesÎļþ£¬ÀïÃæÖ¸¶¨ËùÓÐImport-Package²»ÐèÒªimportµÄpackage£¬ÀïÃæµÄÄÚÈÝ»ù±¾ÎªjdkÀïµÄpackage£¬ÒòΪjdk¸Õ¿ªÊ¼ÓÉWebAppClassLoader¼ÓÔØ, µ±È»¿ÉÒÔΪÿ¸öBundleĬÈÏдÉÏIgnore-Package¡£

Bundle-SymbolicName£ºBundleµÄÃû×Ö£¬½¨ÒéÓÃ${project.groupId}+${project.artifactId}µÄ×éºÏ
InterfaceÀàÐ͵ÄBundleÔÚ¿ª·¢¹ý³ÌÒ»°ãֻдExport-Package¾ÍºÃ£¬Èç¹û½Ó¿ÚBundle×÷Ϊ¶þ·½¿â·½Ê½¿ª·¢Ò²¿ÉÒÔ£¬ÔÚBundle.implementÖÐÒýÓýӿÚpomµÄʱºò£¬²å¼þÔÚת»»Bundle.implement֮ǰת»»¶Ô½Ó¿Ú×öBundle Convert£¬Îª½Ó¿ÚBundleÖеÄMANIFEST.MFдÈëÕýÈ·µÄImport-PackageºÍExport-PackageÐÅÏ¢¡£

Bundle.implement×÷ΪʵÏÖBundle£¬Ò»°ã²»ÐèҪдExport-package/Import-Package£¬Ò»Ð©ÌØÊâµÄBundle£¬ÈçÕâ¸öBundle.implementʵÏÖʹÓÃÁ˶¯Ì¬´úÀíµÄservice£¬ÄÇô´ó¶à¿ÉÒÔÔÚImport-PackageÖÐÖ¸¶¨Õâ¸öservice interfaceµÄpackageÀ´½â¾ö¡£

²å¼þ±àÒë²ÎÊýÉè¼Æ£¬ÎªÁËÌáÉýЧÂÊ£¬±ØÒªµÄ±àÒë²ÎÊýÒ²ÊÇÐèÒªµÄ£º

²å¼þ±àÒë²ÎÊýÉè¼Æ£¬ÎªÁËÌáÉýЧÂÊ£¬±ØÒªµÄ±àÒë²ÎÊýÒ²ÊÇÐèÒªµÄ£º
//±àÒëǰÊÇ·ñÇåÀí»º´æÄ¿Â¼
maven install -Dbundle.clean=true/(false)
//ÊÇ·ñ±àÒësnapshot
maven install -Dsnapshot.rebuild=(true)/false
//Ö»±àÒëÖ¸¶¨µÄbundle
maven install -D buildBundle=com.common.util

ÕâÑù¶ÔBundleµÄImport-PackageºÍExport-Package¿ÉÒÔ½øÐÐÒ»¶¨³Ì¶ÈµÄ×Ô¶¨ÒåÁË£¬µ«ÊÇÎÒÃÇ»¹ÊǸüÏ£Íû¾¡Á¿Ò»´ÎÐÔÍêÕûµÄת»»ºÃBundle£¬Óòå¼þÀ´ÍêÈ«¸ºÔðת»»Import-PackageºÍExport-Package¡£

4.4 MANIFEST.MFÖÐÆäËûÐÅÏ¢µÄ¶¨Òå

Bundle-Convert£º±íʾ´ÓÆÕͨJarתΪOSGi BundleºóµÄ±íʾ

Bundle-Build£º±íʾԭÏÈÊDZê×¼µÄOSGi Bundle£¬Èç×Ô¼º¿ª·¢µÄ±ê×¼Bundle.implement

Bundle-Sha1£º±íʾÕâ¸öBundleµÄΨһ°æ±¾ÐÅÏ¢£¬¼ÆË㷽ʽ£ºBundleConvertUtil.getSha1(File file)£»¾ßÌåsha1»òÕßmd5¼ÆËã·½·¨ºÜ¶à£¬ÕâÀïµÄ¾ßÌå×÷Óû¹ÎªÁËÒÔºó½«×ª»»ºóµÄBundle±£´æµ½Ò»¸ö×é¼þ²Ö¿âÖбÜÃâÖØ¸´BundleµÄ¶à´Îת»»£¬Ò²¿ÉÒÔÓÃÀ´Çø·ÖÒ»¸öBundleÊÇ·ñ±»¶à´Î±àÒë¡£

5.×ܽá

¸Ä½øºóµÄConvert²å¼þÒ²»¹´æÔÚÒ»¸öÎÊÌ⣬pomת»»ÎªOSGi Bundleʱ³öÏÖµÄJar°æ±¾³åÍ»£¬ÔÊÐí2¸ö°æ±¾¶¼¿ÉÒÔʹÓã¬ÕâÀïµÄ·½·¨ÊÇʹÓÃ×Ô¼º½â¾ö³åÍ»µÄ·½Ê½£¬²å¼þת»»Ê±ÓÃÁËmavenÖٲõİ汾¡£ÕâÀïµÄ°æ±¾¾ÍÏ൱¿Ó£¬mavenʹÓÃÊ÷×´×î¶Ì·¾¶°æ±¾£¬¶øOSGi BundleʹÓõÄÊÇͼ״¹ØÁª°æ±¾£¬¹ÊÕâ¸öʱºòʹÓöà¸ö°æ±¾µÄOSGi Bundle»áʹÓÃversion="[xxx,xxx]"Çø¼äÖµ±í´ï£¬µ«ÊÇÔÚÎÒÃÇÕâÀﻹÊǽ¨ÒéʹÓÃmavenÖÙ²ÃÑ¡ÔñÒ»¸ö¹Ì¶¨°æ±¾¡£µ±È»¹Ì¶¨°æ±¾Ñ¡ÔñÊÇΪÁËÖ§³ÖextraʹÓã¬ËùÒÔÔÚÕâ¸ö²å¼þʹÓõÄʱºò£¬²»½¨ÒéÓ¦Ó÷½ÔÚpomÖеÄJarÒÀÀµÓë½Ó¿ÚBundleµÄpomÒÀÀµÓгåÍ»£¬³åÍ»ÐèÒªÓ¦Ó÷½ÌáǰÏȽâ¾ö£¬µ±È»Õâ¸ö×ö·¨Ò²ÊǺÏÀíµÄ£¬ÒòΪӦÓÃÐÂÒýÈëÒ»¸ö½Ó¿ÚJarµÄʱºò£¬pomÒÀÀµÓгåÍ»ÄÇôÐèÒªÌáǰ½â¾ö¡£ÔÚ²å¼þÖÐÒ²¿ÉÒÔÔÚת»»¹ý³ÌÖоͽ«ÓгåÍ»µÄPackageÌáǰÅ׳öÒì³£¸æÖª¿ª·¢Õߣ¬ÔÚ±àÒëÆÚ¾ÍÈÿª·¢Õß½â¾öµôÕâ¸öÎÊÌâ¡£

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

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

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

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

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¼°ÆäÇ°ÑØ¼¼Êõ