CINXE.COM
Understanding Java 9 Modules
<!DOCTYPE html> <html lang="en-US" class="no-js"><!-- start : Compass/Generic --> <!-- start : ocom/common/global/components/compass/head --> <head> <!-- start : ocom/common/global/components/head --> <title>Understanding Java 9 Modules</title> <meta name="Title" content="Understanding Java 9 Modules"> <meta name="Description" content="What they are and how to use them."> <meta name="Keywords" content="Java 9, Deitel, Modules, JPMS, Jigsaw"> <meta name="siteid" content="us"> <meta name="countryid" content="US"> <meta name="robots" content="index, follow"> <meta name="country" content="United States"> <meta name="region" content="americas"> <meta name="Language" content="en"> <meta name="Updated Date" content="2020-03-09T01:22:04Z"> <meta name="page_type" content="Corporate-Other"> <script type="text/javascript"> var pageData = pageData || {}; //page info pageData.pageInfo = pageData.pageInfo || {}; pageData.pageInfo.language = "en"; pageData.pageInfo.country = "United States"; pageData.pageInfo.region = "americas"; pageData.pageInfo.pageTitle = "Understanding Java 9 Modules"; pageData.pageInfo.description = "What they are and how to use them."; pageData.pageInfo.keywords = "Java 9, Deitel, Modules, JPMS, Jigsaw"; pageData.pageInfo.siteId = "us"; pageData.pageInfo.countryId = "US"; pageData.pageInfo.updatedDate = "2020-03-09T01:22:04Z"; </script> <!-- start : ocom/common/global/components/seo-taxonomy-meta-data--> <script type="text/javascript"> var pageData = pageData || {}; //taxonmy pageData.taxonomy = pageData.taxonomy || {}; pageData.taxonomy.productServices = []; pageData.taxonomy.industry = []; pageData.taxonomy.region = []; pageData.taxonomy.contentType = []; pageData.taxonomy.buyersJourney = []; pageData.taxonomy.revenue = []; pageData.taxonomy.title = []; pageData.taxonomy.audience = []; pageData.taxonomy.persona = []; </script> <!-- end : ocom/common/global/components/seo-taxonomy-meta-data--> <!-- start : ocom/common/global/components/social-media-meta-tags --><!-- F13v0 --> <meta property="og:title" content="Understanding Java 9 Modules"/> <meta property="og:description" content="What they are and how to use them."/> <meta property="og:image" content="https://www.oracle.com/a/ocom/img/social-og-oracle-logo-default-1200x628.png" /> <!-- /F13v0 --> <!-- F13v1 --> <meta name="twitter:card" content="summary"> <meta name="twitter:title" content="Understanding Java 9 Modules"/> <meta name="twitter:description" content="What they are and how to use them."/> <meta name="twitter:image" content="https://www.oracle.com/a/ocom/img/social-og-oracle-logo-default-1200x1200.png" /> <!-- /F13v1 --> <!-- end : ocom/common/global/components/social-media-meta-tags --> <!-- start : ocom/common/global/components/seo-hreflang-meta-tags --><link rel="canonical" href="https://www.oracle.com/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-AE" href="https://www.oracle.com/ae/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="ar-AE" href="https://www.oracle.com/ae-ar/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="es-AR" href="https://www.oracle.com/ar/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="de-AT" href="https://www.oracle.com/at/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-AU" href="https://www.oracle.com/au/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-BA" href="https://www.oracle.com/ba/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-BD" href="https://www.oracle.com/bd/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-BE" href="https://www.oracle.com/be/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="bg-BG" href="https://www.oracle.com/bg/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-BH" href="https://www.oracle.com/bh/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="ar-BH" href="https://www.oracle.com/bh-ar/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="pt-BR" href="https://www.oracle.com/br/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-BZ" href="https://www.oracle.com/bz/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-CA" href="https://www.oracle.com/ca-en/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="fr-CA" href="https://www.oracle.com/ca-fr/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="de-CH" href="https://www.oracle.com/ch-de/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="fr-CH" href="https://www.oracle.com/ch-fr/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="es-CL" href="https://www.oracle.com/cl/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="zh-CN" href="https://www.oracle.com/cn/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="es-CO" href="https://www.oracle.com/co/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="es-CR" href="https://www.oracle.com/cr/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-CY" href="https://www.oracle.com/cy/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="cs-CZ" href="https://www.oracle.com/cz/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="de-DE" href="https://www.oracle.com/de/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-US" href="https://www.oracle.com/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="da-DK" href="https://www.oracle.com/dk/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="fr-DZ" href="https://www.oracle.com/dz/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-EE" href="https://www.oracle.com/ee/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-EG" href="https://www.oracle.com/eg/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="ar-EG" href="https://www.oracle.com/eg-ar/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="es-ES" href="https://www.oracle.com/es/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="fi-FI" href="https://www.oracle.com/fi/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="fr-FR" href="https://www.oracle.com/fr/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-GH" href="https://www.oracle.com/gh/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="el-GR" href="https://www.oracle.com/gr/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-HK" href="https://www.oracle.com/hk/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="hr-HR" href="https://www.oracle.com/hr/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="hu-HU" href="https://www.oracle.com/hu/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-ID" href="https://www.oracle.com/id/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-IE" href="https://www.oracle.com/ie/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="he-IL" href="https://www.oracle.com/il/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-IL" href="https://www.oracle.com/il-en/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-IN" href="https://www.oracle.com/in/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="it-IT" href="https://www.oracle.com/it/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-JO" href="https://www.oracle.com/jo/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="ar-JO" href="https://www.oracle.com/jo-ar/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="ja-JP" href="https://www.oracle.com/jp/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-KE" href="https://www.oracle.com/ke/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="ko-KR" href="https://www.oracle.com/kr/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-KW" href="https://www.oracle.com/kw/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="ar-KW" href="https://www.oracle.com/kw-ar/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-LK" href="https://www.oracle.com/lk/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-LU" href="https://www.oracle.com/lu/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="lv-LV" href="https://www.oracle.com/lv/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="fr-MA" href="https://www.oracle.com/ma/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="es-MX" href="https://www.oracle.com/mx/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-MY" href="https://www.oracle.com/my/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-NG" href="https://www.oracle.com/ng/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="nl-NL" href="https://www.oracle.com/nl/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="no-NO" href="https://www.oracle.com/no/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-NZ" href="https://www.oracle.com/nz/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="es-PE" href="https://www.oracle.com/pe/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-PH" href="https://www.oracle.com/ph/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="pl-PL" href="https://www.oracle.com/pl/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="pt-PT" href="https://www.oracle.com/pt/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-QA" href="https://www.oracle.com/qa/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="ar-QA" href="https://www.oracle.com/qa-ar/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="ro-RO" href="https://www.oracle.com/ro/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="sr-RS" href="https://www.oracle.com/rs/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-SA" href="https://www.oracle.com/sa/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="ar-SA" href="https://www.oracle.com/sa-ar/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="sv-SE" href="https://www.oracle.com/se/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-SG" href="https://www.oracle.com/sg/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="sl-SI" href="https://www.oracle.com/si/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="sk-SK" href="https://www.oracle.com/sk/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="fr-SN" href="https://www.oracle.com/sn/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-TH" href="https://www.oracle.com/th/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="tr-TR" href="https://www.oracle.com/tr/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="zh-TW" href="https://www.oracle.com/tw/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="uk-UA" href="https://www.oracle.com/ua/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-GB" href="https://www.oracle.com/uk/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="es-UY" href="https://www.oracle.com/uy/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-VN" href="https://www.oracle.com/vn/corporate/features/understanding-java-9-modules.html" /> <link rel="alternate" hreflang="en-ZA" href="https://www.oracle.com/za/corporate/features/understanding-java-9-modules.html" /> <meta name="altpages" content="ae,ae-ar,ar,at,au,ba,bd,be,bg,bh,bh-ar,br,bz,ca-en,ca-fr,ch-de,ch-fr,cl,cn,co,cr,cy,cz,de,dk,dz,ee,eg,eg-ar,es,fi,fr,gh,gr,hk,hr,hu,id,ie,il,il-en,in,it,jo,jo-ar,jp,ke,kr,kw,kw-ar,lk,lu,lv,ma,mx,my,ng,nl,no,nz,pe,ph,pl,pt,qa,qa-ar,ro,rs,sa,sa-ar,se,sg,si,sk,sn,th,tr,tw,ua,uk,uy,vn,za"> <script type="text/javascript"> var pageData = pageData || {}; //page info pageData.pageInfo = pageData.pageInfo || {}; pageData.pageInfo.altPages = "ae,ae-ar,ar,at,au,ba,bd,be,bg,bh,bh-ar,br,bz,ca-en,ca-fr,ch-de,ch-fr,cl,cn,co,cr,cy,cz,de,dk,dz,ee,eg,eg-ar,es,fi,fr,gh,gr,hk,hr,hu,id,ie,il,il-en,in,it,jo,jo-ar,jp,ke,kr,kw,kw-ar,lk,lu,lv,ma,mx,my,ng,nl,no,nz,pe,ph,pl,pt,qa,qa-ar,ro,rs,sa,sa-ar,se,sg,si,sk,sn,th,tr,tw,ua,uk,uy,vn,za"; </script> <!-- end : ocom/common/global/components/seo-hreflang-meta-tags --> <!-- end : ocom/common/global/components/head --> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link href='//www.oracle.com/asset/web/css/compass.css' media="print, screen" rel="Stylesheet" type="text/css"/> <script language="JavaScript" src='//www.oracle.com/asset/web/js/jquery.js' type="text/javascript"></script> <script type="text/javascript" src='//www.oracle.com/asset/web/js/compass.js'></script> <!-- start : ocom/common/global/components/truste-language-code --> <script async="async" type="text/javascript" src='//consent.truste.com/notice?domain=oracle.com&c=teconsent&js=bb¬iceType=bb&text=true>m=1&cdn=1&pcookie' crossorigin></script> <!-- end : ocom/common/global/components/truste-language-code --> <!-- Container/Display Start --> <!-- BEGIN: oWidget_C/_Raw-Text/Display --> <!-- www-us HeadAdminContainer --> <link rel="icon" href="https://www.oracle.com/asset/web/favicons/favicon-32.png" sizes="32x32"> <link rel="icon" href="https://www.oracle.com/asset/web/favicons/favicon-128.png" sizes="128x128"> <link rel="icon" href="https://www.oracle.com/asset/web/favicons/favicon-192.png" sizes="192x192"> <link rel="apple-touch-icon" href="https://www.oracle.com/asset/web/favicons/favicon-120.png" sizes="120x120"> <link rel="apple-touch-icon" href="https://www.oracle.com/asset/web/favicons/favicon-152.png" sizes="152x152"> <link rel="apple-touch-icon" href="https://www.oracle.com/asset/web/favicons/favicon-180.png" sizes="180x180"> <meta name="msapplication-TileColor" content="#fcfbfa"/> <meta name="msapplication-square70x70logo" content="favicon-128.png"/> <meta name="msapplication-square150x150logo" content="favicon-270.png"/> <meta name="msapplication-TileImage" content="favicon-270.png"/> <meta name="msapplication-config" content="none"/> <meta name="referrer" content="no-referrer-when-downgrade"/> <style> #oReactiveChatContainer1 { display:none;} </style> <!--Tealium embed code Start --> <script src="https://tms.oracle.com/main/prod/utag.sync.js"></script> <!-- Loading script asynchronously --> <script type="text/javascript"> (function(a,b,c,d){ if(location.href.indexOf("tealium=dev") == -1) { a='https://tms.oracle.com/main/prod/utag.js'; } else { a='https://tms.oracle.com/main/dev/utag.js'; } b=document;c='script';d=b.createElement(c);d.src=a;d.type='text/java'+c;d.async=true; a=b.getElementsByTagName(c)[0];a.parentNode.insertBefore(d,a); })(); </script> <!--Tealium embed code End--> <!-- END: oWidget_C/_Raw-Text/Display --> <!-- Container/Display end --> <script>(window.BOOMR_mq=window.BOOMR_mq||[]).push(["addVar",{"rua.upush":"false","rua.cpush":"false","rua.upre":"false","rua.cpre":"false","rua.uprl":"false","rua.cprl":"false","rua.cprf":"false","rua.trans":"","rua.cook":"false","rua.ims":"false","rua.ufprl":"false","rua.cfprl":"false","rua.isuxp":"false","rua.texp":"norulematch","rua.ceh":"false","rua.ueh":"false","rua.ieh.st":"0"}]);</script> <script>!function(e){var n="https://s.go-mpulse.net/boomerang/";if("False"=="True")e.BOOMR_config=e.BOOMR_config||{},e.BOOMR_config.PageParams=e.BOOMR_config.PageParams||{},e.BOOMR_config.PageParams.pci=!0,n="https://s2.go-mpulse.net/boomerang/";if(window.BOOMR_API_key="DXNLE-YBWWY-AR74T-WMD99-77VRA",function(){function e(){if(!o){var e=document.createElement("script");e.id="boomr-scr-as",e.src=window.BOOMR.url,e.async=!0,i.parentNode.appendChild(e),o=!0}}function t(e){o=!0;var n,t,a,r,d=document,O=window;if(window.BOOMR.snippetMethod=e?"if":"i",t=function(e,n){var t=d.createElement("script");t.id=n||"boomr-if-as",t.src=window.BOOMR.url,BOOMR_lstart=(new Date).getTime(),e=e||d.body,e.appendChild(t)},!window.addEventListener&&window.attachEvent&&navigator.userAgent.match(/MSIE [67]\./))return window.BOOMR.snippetMethod="s",void t(i.parentNode,"boomr-async");a=document.createElement("IFRAME"),a.src="about:blank",a.title="",a.role="presentation",a.loading="eager",r=(a.frameElement||a).style,r.width=0,r.height=0,r.border=0,r.display="none",i.parentNode.appendChild(a);try{O=a.contentWindow,d=O.document.open()}catch(_){n=document.domain,a.src="javascript:var d=document.open();d.domain='"+n+"';void(0);",O=a.contentWindow,d=O.document.open()}if(n)d._boomrl=function(){this.domain=n,t()},d.write("<bo"+"dy onload='document._boomrl();'>");else if(O._boomrl=function(){t()},O.addEventListener)O.addEventListener("load",O._boomrl,!1);else if(O.attachEvent)O.attachEvent("onload",O._boomrl);d.close()}function a(e){window.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}if(!window.BOOMR||!window.BOOMR.version&&!window.BOOMR.snippetExecuted){window.BOOMR=window.BOOMR||{},window.BOOMR.snippetStart=(new Date).getTime(),window.BOOMR.snippetExecuted=!0,window.BOOMR.snippetVersion=12,window.BOOMR.url=n+"DXNLE-YBWWY-AR74T-WMD99-77VRA";var i=document.currentScript||document.getElementsByTagName("script")[0],o=!1,r=document.createElement("link");if(r.relList&&"function"==typeof r.relList.supports&&r.relList.supports("preload")&&"as"in r)window.BOOMR.snippetMethod="p",r.href=window.BOOMR.url,r.rel="preload",r.as="script",r.addEventListener("load",e),r.addEventListener("error",function(){t(!0)}),setTimeout(function(){if(!o)t(!0)},3e3),BOOMR_lstart=(new Date).getTime(),i.parentNode.appendChild(r);else t(!1);if(window.addEventListener)window.addEventListener("load",a,!1);else if(window.attachEvent)window.attachEvent("onload",a)}}(),"".length>0)if(e&&"performance"in e&&e.performance&&"function"==typeof e.performance.setResourceTimingBufferSize)e.performance.setResourceTimingBufferSize();!function(){if(BOOMR=e.BOOMR||{},BOOMR.plugins=BOOMR.plugins||{},!BOOMR.plugins.AK){var n=""=="true"?1:0,t="",a="bdpnbeqxz62vwz2c3djq-f-0d10299fa-clientnsv4-s.akamaihd.net",i="false"=="true"?2:1,o={"ak.v":"39","ak.cp":"82485","ak.ai":parseInt("604074",10),"ak.ol":"0","ak.cr":4,"ak.ipv":4,"ak.proto":"http/1.1","ak.rid":"1dbb99f","ak.r":45578,"ak.a2":n,"ak.m":"dscx","ak.n":"essl","ak.bpcip":"8.222.208.0","ak.cport":41694,"ak.gh":"23.59.168.140","ak.quicv":"","ak.tlsv":"tls1.2","ak.0rtt":"","ak.0rtt.ed":"","ak.csrc":"-","ak.acc":"reno","ak.t":"1732434131","ak.ak":"hOBiQwZUYzCg5VSAfCLimQ==t6t8YzYoGlzn5piMCGx8z5n6e9AYPmK6jrHSwutixOmV7Vm4fEej+InExHoyRvROc7x5tFxHquWbB9pvVtJumR/ohVAE30Ff4s5qiiq6r4oKz/H6edoco1cVdxFOWNu0YY1LCQ+0HKjv75WHq6KQ1JB3dj37PU7OUX5yT/X1ifuTX0j5Qp2vsn4JZPYVDri605DHAkoxh20EluDgFjuTlcMA0NCDE49nMgmaA4IK72RXoIgLy16jYeIlu1QhNpcs/3b8jBl9BwTEgCCWeZN7JXYZZ8tfTSJq/1ixHyZPe6yQGmfmf3AotKJXk9AA1nrM6+kO/5sQ1XsZkYq2CZTovV4nduWE+NgNGKhzvQWb3ywJ3UQgUlhNjI2ZHLjoL3BD4S/nSsSbniUBm1pCZuHhsRdHP5pFnitcsHy4VhqEJ2k=","ak.pv":"492","ak.dpoabenc":"","ak.tf":i};if(""!==t)o["ak.ruds"]=t;var r={i:!1,av:function(n){var t="http.initiator";if(n&&(!n[t]||"spa_hard"===n[t]))o["ak.feo"]=void 0!==e.aFeoApplied?1:0,BOOMR.addVar(o)},rv:function(){var e=["ak.bpcip","ak.cport","ak.cr","ak.csrc","ak.gh","ak.ipv","ak.m","ak.n","ak.ol","ak.proto","ak.quicv","ak.tlsv","ak.0rtt","ak.0rtt.ed","ak.r","ak.acc","ak.t","ak.tf"];BOOMR.removeVar(e)}};BOOMR.plugins.AK={akVars:o,akDNSPreFetchDomain:a,init:function(){if(!r.i){var e=BOOMR.subscribe;e("before_beacon",r.av,null,null),e("onbeacon",r.rv,null,null),r.i=!0}return this},is_complete:function(){return!0}}}}()}(window);</script></head><!-- end : ocom/common/global/components/compass/head --> <body class="f11 f11v0"> <!-- Container/Display Start --> <!-- BEGIN: oWidget_C/_Raw-Text/Display --> <!-- www-us StartBodyAdminContainer --> <!-- END: oWidget_C/_Raw-Text/Display --> <!-- Container/Display end --> <div class="f11w1"> <!-- start : ocom/common/global/components/u01-header --> <!-- Dispatcher:null --> <!-- BEGIN: oWidget_C/_Raw-Text/Display --> <!-- U28v1 --> <section class="u28 u28v1 u28adj u28simplified" id="u28" data-trackas="header"> <div id="u28skip2content" aria-expanded="false" tabindex="-1"> <ul> <li><a id="u28acc" href="https://www.oracle.com/corporate/accessibility/">Click to view our Accessibility Policy</a></li> <li><a id="u28skip2c" href="#maincontent">Skip to content</a></li> </ul> </div> <div class="u28w1"> <div class="cwidth"> <div class="u28s1" id="u28s1"> <a class="u28home rw-logo" href="https://www.oracle.com/" data-lbl="logo">home</a> <a class="u28ham" href="/universal-menu/" data-lbl="menu">nav</a> </div> <div class="u28s2"> <div class="u28w2"> <form name="askoracle" id="askoracle" class="askoracle" data-contentpaths="/content/Web/Shared/Auto-Suggest Panel Event" method="get" action="/search/results" data-resultsclose="Close" data-resultscloselabel="Exit Search Results"> <input type="hidden" name="Nty" value="1"> <input type="hidden" name="Dy" value="1"> <input type="hidden" name="Ntk" value="SI-ALL5"> <input type="hidden" name="cty" value="us"> <input type="hidden" name="lang" value="en"> <div class="u28w3"> <div class="u28logo rw-logo"> <span>Oracle</span> </div> <a class="u28-back rw-cv-left" href="#back" title="Close Search Field"> <span>Close</span> </a> <a class="u28-searchicon" href="#search"> <span>Search</span> </a> <span class="u28input"> <input id="askoracleinput" name="Ntt" value="" data-prefix="Ask" placeholder="Ask" autocomplete="off" role="combobox" aria-label="Search Oracle.com"> <span class="u28submit"> <input class="u28searchbttn" type="submit" value="Submit Search"> </span> </span> </div> </form> </div> </div> <nav class="u28s4"> <a class="u28search u28navitm" id="u28search" aria-label="Open Search Field" href="#search"><span>Search</span></a> <a href="#products" data-target="products" class="u28navitm">Products</a> <a href="#industries" data-target="industries" class="u28navitm">Industries</a> <a href="#resources" data-target="resources" class="u28navitm">Resources</a> <a href="#resources" data-target="resources" class="u28navitm">Customers</a> <a href="#partners" data-target="partners" class="u28navitm">Partners</a> <a href="#developer" data-target="developer" class="u28navitm">Developer</a> <a href="#events" data-target="company" class="u28navitm">Company</a> </nav> <div class="u28s3" id="u28s3"> <div class="u28-profile"> <a href="#" class="u28prof" data-lbl="sign-in-account" title="View Accounts"><div class="acttxt">View Accounts</div><span>Sign In</span></a> <div class="u28-profilew1"> <span class="u28actbck u28back">Back</span> <span class="u28acttitle">Oracle Account</span> <div class="u28-profilew2"> <span class="u28acttitle">Cloud Account</span> <a href="/cloud/sign-in.html" class="u28cloudbg" data-lbl="go-to-cloud-website" aria-label="Sign in to Cloud">Sign in to Cloud</a> <a href="/cloud/free/?source=:ow:o:h:nav:OHP0625ViewAccountsButton&intcmp=:ow:o:h:nav:OHP0625ViewAccountsButton" class="u28btn2" data-lbl="cta-0625-nav-header-accounts-free-tier-oci" aria-label="Sign Up for Free Cloud Tier">Sign Up for Free Cloud Tier</a> </div> <ul class="u28l-out"> <li><a href="https://www.oracle.com/webapps/redirect/signon?nexturl=" data-lbl="profile:sign-in-account" class="u28btn1">Sign-In</a></li> <li><a href="https://profile.oracle.com/myprofile/account/create-account.jspx" data-lbl="profile:create-account" class="u28btn2">Create an Account</a></li> </ul> <ul class="u28l-in"> <li><a href="/corporate/contact/help.html" data-lbl="help">Help</a></li> <li><a href="javascript:sso_sign_out();" id="u28pfile-sout" data-lbl="signout">Sign Out</a></li> </ul> </div> </div> <div class="u28-contact"> <a href="/corporate/contact/" class="u28contact" data-lbl="contact-sales" title="Contact Sales"><span>Contact Sales</span></a> </div> </div> </div> </div> <div class="u28w4" id="u28w4"> <div class="u28w1a u28w5 clstrgt"> <div class="u28w6"> <!-- Search Results --> <div class="u28w8 u28trgt"></div> <div class="u28w9"> <div class="u28result u28noresults"> <div class="u28rw1"> <div class="u28rw2"> <div>No results found</div> <p>Your search did not match any results.</p> <p>We suggest you try the following to help find what you’re looking for:</p> <ul class="u28w7a"> <li>Check the spelling of your keyword search.</li> <li>Use synonyms for the keyword you typed, for example, try “application” instead of “software.”</li> <li>Try one of the popular searches shown below.</li> <li>Start a new search.</li> </ul> <div>Trending Questions</div> </div> </div> </div> </div> </div> </div> </div> <nav id="u28nav" class="u28nav" data-trackas="menu"> <a href="#close" class="mnavback u28back icn-close">Close</a> </nav> <a id="maincontent"> </a> </section> <!-- /U28v1 --> <!-- END: oWidget_C/_Raw-Text/Display --> <!-- end : ocom/common/global/components/u01-header --> <!-- start : ocom/common/global/components/u03-breadcrumb --> <!-- U03v0 --> <div class="u03 u03v0" data-trackas="breadcrumb"> <div class="u03w1"> <ul> <li class="u03first"><a href="/corporate/">About Oracle</a></li> </ul> </div> </div> <!-- /U03v0 --> <script type="text/javascript"> var pageData = pageData || {}; //page info pageData.pageInfo = pageData.pageInfo || {}; pageData.pageInfo.breadCrumbs = "About Oracle"; </script> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "About Oracle", "item": "https://www.oracle.com/corporate/" } ] } </script> <!-- start : ocom/common/global/components/u03-breadcrumb --> <!-- start : ocom/common/global/components/banner --> <!-- end : ocom/common/global/components/banner --> <!-- start : ocom/common/global/components/compass/related-widgets --> <!-- Dispatcher:null --> <!-- BEGIN: oWidget_C/_Raw-Text/Display --> <p> </p> <!-- C81v1 --> <div class="c81 c81v1 cwidth"> <div class="c81w1"> <div class="hd-section">Java 9 | Excerpt</div> <h1 class="hdx">Understanding Java 9 Modules</h1> <p>What they are and how to use them</p> <p>By Paul Deitel</p> </div> </div> <!-- /C81v1 --> <hr class="rulesmall"> <!-- C81v1 --> <div class="c81 c81v1 cwidth"> <div class="c81w1"> <div class="c81w2 c81fr"> <!-- C82v0 --> <div class="c82 c82v0"> <img src="//www.oracle.com/assets/c82-paul-deitel-4031894.jpg" alt="Paul Deitel"> <p>Paul Deitel</p> </div> <!-- /C82v0 --> </div> <p>In this article, I introduce the Java 9 Platform Module System (JPMS), the most important new software engineering technology in Java since its inception. Modularity—the result of <a href="http://openjdk.java.net/projects/jigsaw/" target="_blank">Project Jigsaw</a>—helps developers at all levels be more productive as they build, maintain, and evolve software systems, especially large systems.</p> <h4>What Is a Module?</h4> <p>Modularity adds a higher level of aggregation above packages. The key new language element is the <strong>module</strong>—a uniquely named, reusable group of related packages, as well as resources (such as images and XML files) and a <strong>module descriptor</strong> specifying</p> <ul class="obullets"> <li>the module’s <strong>name</strong></li> <li>the module’s <strong>dependencies</strong> (that is, other modules this module depends on)</li> <li>the packages it explicitly makes available to other modules (all other packages in the module are <strong>implicitly unavailable</strong> to other modules)</li> <li>the <strong>services it offers</strong></li> <li>the <strong>services it consumes</strong></li> <li>to what other modules it allows <strong>reflection</strong></li> </ul> <h4>History</h4> <p>The Java SE platform has been around since 1995. There are now approximately 10 million developers using it to build everything from small apps for resource-constrained devices—like those in the Internet of Things (IoT) and other embedded devices—to large-scale business-critical and mission-critical systems. There are massive amounts of legacy code out there, but until now, the Java platform has primarily been a monolithic one-size-fits-all solution. Over the years, there have been various efforts geared to modularizing Java, but none is widely used—and none could be used to modularize the Java platform.</p> <p>Modularizing the Java SE platform has been challenging to implement, and the effort has taken many years. <a href="https://jcp.org/en/jsr/detail?id=277" target="_blank">JSR 277: Java Module System</a> was originally proposed in 2005 for Java 7. This JSR was later superseded by <a href="https://jcp.org/en/jsr/detail?id=376" target="_blank">JSR 376: Java Platform Module System</a> and targeted for Java 8. The Java SE platform is now modularized in Java 9, but only after Java 9 was delayed until September 2017.</p> <h4>Goals</h4> <div class="c81w2 c81fr"> <!-- C82v0 --> <div class="c82 c82v0"> <p class="c82qte"><span class="ltqt"></span>Each module must explicitly state its dependencies. <span class="brqt"></span></p> </div> <!-- /C82v0 --> </div> <p>According to JSR 376, the key goals of modularizing the Java SE platform are</p> <ul class="obullets"> <li>Reliable configuration—Modularity provides mechanisms for explicitly declaring dependencies between modules in a manner that’s recognized both at compile time and execution time. The system can walk through these dependencies to determine the subset of all modules required to support your app.</li> <li>Strong encapsulation—The packages in a module are accessible to other modules only if the module explicitly exports them. Even then, another module cannot use those packages unless it explicitly states that it requires the other module’s capabilities. This improves platform security because fewer classes are accessible to potential attackers. You may find that considering modularity helps you come up with cleaner, more logical designs.</li> <li>Scalable Java platform—Previously, the Java platform was a monolith consisting of a massive number of packages, making it challenging to develop, maintain and evolve. It couldn’t be easily subsetted. The platform is now modularized into 95 modules (this number might change as Java evolves). You can create custom runtimes consisting of only modules you need for your apps or the devices you’re targeting. For example, if a device does not support GUIs, you could create a runtime that does not include the GUI modules, significantly reducing the runtime’s size.</li> <li>Greater platform integrity—Before Java 9, it was possible to use many classes in the platform that were not meant for use by an app’s classes. With strong encapsulation, these internal APIs are truly encapsulated and hidden from apps using the platform. This can make migrating legacy code to modularized Java 9 problematic if your code depends on internal APIs.</li> <li>Improved performance—The JVM uses various optimization techniques to improve application performance. JSR 376 indicates that these techniques are more effective when it’s known in advance that required types are located only in specific modules.</li> </ul> <h4>Listing the JDK’s Modules</h4> <div class="c81w2 c81fr"> <!-- C82v0 --> <div class="c82 c82v0"> <p><strong>JEP 200: <a href="https://openjdk.java.net/jeps/200" target="_blank">THE MODULAR JDK</a></strong></p> <p><strong>JEP 201: <a href="https://openjdk.java.net/jeps/201" target="_blank">MODULAR SOURCE CODE</a></strong></p> <p><strong>JEP 220: <a href="https://openjdk.java.net/jeps/220" target="_blank">MODULAR RUN-TIME IMAGES</a></strong></p> <p><strong>JEP 260: <a href="https://openjdk.java.net/jeps/260" target="_blank">ENCAPSULATE MOST INTERNAL APIS</a></strong></p> <p><strong>JEP 261: <a href="https://openjdk.java.net/jeps/261" target="_blank">MODULE SYSTEM</a></strong></p> <p><strong>JEP 275: <a href="https://openjdk.java.net/jeps/275" target="_blank">MODULAR JAVA APPLICATION PACKAGING</a></strong></p> <p><strong>JEP 282: <a href="https://openjdk.java.net/jeps/282" target="_blank">JLINK: THE JAVA LINKER</a></strong></p> <p><strong>JSR 376: <a href="https://www.jcp.org/en/jsr/detail?id=376" target="_blank">JAVA PLATFORM MODULE SYSTEM</a></strong></p> <p><strong>JSR 379: <a href="https://www.jcp.org/en/jsr/detail?id=379" target="_blank">JAVA SE 9</a></strong></p> <p><strong>Table 1.</strong> Java Modularity JEPs and JSRs</p> </div> <!-- /C82v0 --> </div> <p>A crucial aspect of Java 9 is dividing the JDK into modules to support various configurations. (Consult “<a href="https://openjdk.java.net/jeps/200" target="_blank">JEP 200: The Modular JDK</a>.” All the Java modularity JEPs and JSRs are shown in <strong>Table 1</strong>.) Using the java command from the JDK’s bin folder with the <code>--list-modules</code> option, as in: </p> <code>java --list-modules</code><p></p> <p>lists the JDK’s set of modules, which includes the standard modules that implement the Java Language SE Specification (names starting with <code>java</code>), JavaFX modules (names starting with <code>javafx</code>), JDK-specific modules (names starting with <code>jdk</code>) and Oracle-specific modules (names starting with <code>oracle</code>). Each module name is followed by a version string—<code>@9</code> indicates that the module belongs to Java 9.</p> <h4>Module Declarations</h4> <p>As we mentioned, a module must provide a module descriptor—metadata that specifies the module’s dependencies, the packages the module makes available to other modules, and more. A module descriptor is the compiled version of a module declaration that’s defined in a file named <code>module-info.java</code>. Each module declaration begins with the keyword <code>module</code>, followed by a unique module name and a module body enclosed in braces, as in:</p> <div class="c81w2 c81fr"> <!-- C82v0 --> <div class="c82 c82v0"> <p class="c82qte"><span class="ltqt"></span>A key motivation of the module system is strong encapsulation. <span class="brqt"></span></p> </div> <!-- /C82v0 --> </div> <code>module <strong>modulename</strong> { <br /> }</code><p></p> <p>The module declaration’s body can be empty or may contain various <strong>module directives</strong>, including <code>requires</code>, <code>exports</code>, <code>provides…with</code>, <code>uses</code> and <code>opens</code> (each of which we discuss). As you’ll see later, compiling the module declaration creates the module descriptor, which is stored in a file named <code>module-info.class</code> in the module’s root folder. Here we briefly introduce each module directive. After that, we’ll present actual module declarations.</p> <p>The keywords <code>exports</code>, <code>module</code>, <code>open</code>, <code>opens</code>, <code>provides</code>, <code>requires</code>, <code>uses</code>, <code>with</code>, as well as <code>to</code> and <code>transitive</code>, which we introduce later, are restricted keywords. They’re keywords only in module declarations and may be used as identifiers anywhere else in your code.</p> <p><strong>requires.</strong> A <code>requires</code> module directive specifies that this module depends on another module—this relationship is called a <strong>module dependency</strong>. Each module must explicitly state its dependencies. When module A <code>requires</code> module B, module A is said to <strong>read</strong> module B and module B is <strong>read by</strong> module A. To specify a dependency on another module, use <code>requires</code>, as in:</p> <code>requires <strong>modulename</strong>;</code><p></p> <p>There is also a <code>requires static</code> directive to indicate that a module is required at compile time, but is optional at runtime. This is known as an <strong>optional dependency</strong> and won’t be discussed in this introduction.</p> <p><strong>requires transitive—implied readability</strong>. To specify a dependency on another module and to ensure that other modules reading your module also read that dependency—known as <strong>implied readability</strong>—use <code>requires transitive</code>, as in:</p> <code>requires transitive <strong>modulename</strong>;</code><p></p> <p>Consider the following directive from the <code>java.desktop</code> module declaration:</p> <code>requires transitive <code>java.xml</code>; </code><p></p> <p>In this case, any module that reads <code>java.desktop</code> also implicitly reads <code>java.xml</code>. For example, if a method from the <code>java.desktop</code> module returns a type from the <code>java.xml</code> module, code in modules that read <code>java.desktop</code> becomes dependent on <code>java.xml</code>. Without the <code>requires transitive</code> directive in <code>java.desktop</code>’s module declaration, such dependent modules will not compile unless they <strong>explicitly</strong> read <code>java.xml</code>.</p> <p>According to JSR 379 Java SE’s standard modules must grant implied readability in all cases like the one described here. Also, though a Java SE standard module may depend on non-standard modules, it <strong>must not</strong> grant implied readability to them. This ensures that code depending only on Java SE standard modules is portable across Java SE implementations.</p> <p><strong>exports and exports…to.</strong> An <code>exports</code> module directive specifies one of the module’s packages whose <code>public</code> types (and their nested <code>public</code> and <code>protected</code> types) should be accessible to code in all other modules. An <code>exports…to</code> directive enables you to specify in a comma-separated list precisely which module’s or modules’ code can access the exported package—this is known as a <strong>qualified</strong> export. </p> <p><strong>uses.</strong> A <code>uses</code> module directive specifies a service used by this module—making the module a service consumer. A <strong>service</strong> is an object of a class that implements the interface or extends the <code>abstract</code> class specified in the <code>uses</code> directive.</p> <p><strong>provides…with.</strong> A <code>provides…with</code> module directive specifies that a module provides a service implementation—making the module a <strong>service provider</strong>. The <code>provides</code> part of the directive specifies an interface or <code>abstract</code> class listed in a module’s <code>uses</code> directive and the <code>with</code> part of the directive specifies the name of the service provider class that <code>implements</code> the interface or <code>extends</code> the <code>abstract</code> class.</p> <p><strong>open, opens, and opens…to.</strong> Before Java 9, reflection could be used to learn about all types in a package and all members of a type—even its <code>private</code> members—whether you wanted to allow this capability or not. Thus, nothing was truly encapsulated.</p> <p>A key motivation of the module system is strong encapsulation. By default, a type in a module is not accessible to other modules unless it’s a public type <strong>and</strong> you export its package. You expose only the packages you want to expose. With Java 9, this also applies to reflection.</p> <p><strong>Allowing runtime-only access to a package.</strong> An opens module directive of the form</p> <code>opens <strong>package</strong></code><p></p> <p>indicates that a specific <strong>package</strong>’s <code>public</code> types (and their nested <code>public</code> and <code>protected</code> types) are accessible to code in other modules at runtime only. Also, all the types in the specified package (and all of the types’ members) are accessible via reflection.</p> <p><strong>Allowing runtime-only access to a package by specific modules.</strong> An <code>opens…to</code> module directive of the form</p> <code>opens package to comma-separated-list-of-modules</code><p></p> <p>indicates that a specific <strong>package</strong>’s <code>public</code> types (and their nested <code>public</code> and <code>protected</code> types) are accessible to code in the listed modules at runtime only. All of the types in the specified package (and all of the types’ members) are accessible via reflection to code in the specified modules.</p> <p><strong>Allowing runtime-only access to all packages in a module.</strong> If all the packages in a given module should be accessible at runtime and via reflection to all other modules, you may <code>open</code> the entire module, as in:</p> <code>open module <strong>modulename</strong> {<br/> // module directives<br/> } </code><p></p> <h4>Reflection Defaults</h4> <p>By default, a module with runtime reflective access to a package can see the package’s <code>public</code> types (and their nested <code>public</code> and <code>protected</code> types). However, the code in other modules can access <strong>all</strong> types in the exposed package and <strong>all</strong> members within those types, including <code>private</code> members via <code>setAccessible</code>, as in earlier Java versions.</p> <p>For more information on <code>setAccessible</code> and reflection, see <a href="https://docs.oracle.com/javase/tutorial/reflect/" target="_blank">Oracle’s documentation</a>.</p> <hr /> <p><strong>Paul Deitel,</strong> CEO and chief technical officer of Deitel & Associates, is a graduate of MIT with 35 years of experience in computing. He is a Java Champion and has been programming in Java for more than 22 years. He and his coauthor, Dr. Harvey M. Deitel, are the world’s best-selling programming-language authors. Paul has delivered Java, Android, iOS, C#, C++, C, and internet programming courses to industry, government, and academic clients internationally.</p> <br /> <p>NOTE: This article is excerpted from <strong>Java Magazine</strong> September/October 2017.</p> </div> </div> <!-- /C81v1 --> <!-- CN11v0 --> <div class="cn11 cn11v0"> <h3>Learn More</h3> <div class="cn11w1"> <div class="cmps-bttns"> <div><a href="http://openjdk.java.net/projects/jigsaw/quick-start" target="_blank">Project Jigsaw: Module System Quick-Start Guide</a></div> <div><a href="http://shop.oreilly.com/product/0636920049494.do" target="_blank">Java 9 Modularity: Patterns and Practices for Developing Maintainable Applications</a></div> <div><a href="http://www.oracle.com/technetwork/java/javamagazine/" target="_blank">Java Magazine</a></div> </div> </div> </div> <!-- /CN11v0 --> <!-- END: oWidget_C/_Raw-Text/Display --> <!-- end : ocom/common/global/components/compass/related-widgets --> <!-- start : ocom/common/global/components/g03-footer --> <!-- Dispatcher:null --> <!-- BEGIN: oWidget_C/_Raw-Text/Display --> <!-- U10v0 --> <footer id="u10" class="u10 u10v6" data-trackas="footer" type="redwood" data-ocomid="u10" data-a11y="true"> <nav class="u10w1" aria-label="Footer"> <div class="u10w2"> <div class="u10w3"> <div class="u10ttl">Resources for</div> <ul> <li><a data-lbl="resources-for:career" href="/careers/">Careers</a></li> <li><a data-lbl="resources-for:developers" href="/developer/">Developers</a></li> <li><a data-lbl="resources-for:investors" href="https://investor.oracle.com/home/default.aspx">Investors</a></li> <li><a data-lbl="resources-for:partners" href="/partner/">Partners</a></li> <li><a data-lbl="resources-for:researchers" href="/research/">Researchers</a></li> <li><a data-lbl="resources-for:students-educators" href="https://academy.oracle.com/en/oa-web-overview.html">Students and Educators</a></li> </ul> </div> </div> <div class="u10w2"> <div class="u10w3"> <div class="u10ttl">Why Oracle</div> <ul> <li><a data-lbl="why-oracle:analyst-reports" href="/corporate/analyst-reports/">Analyst Reports</a> </li> <li><a data-lbl="why-oracle:gartner-mq-erp-cloud" href="/erp/what-is-erp/best-erp/">Best cloud-based ERP</a></li> <li><a data-lbl="why-oracle:cloud-economics" href="/cloud/economics/">Cloud Economics</a></li> <li><a data-lbl="why-oracle:corporate-responsibility" href="/social-impact/">Social Impact</a></li> <li><a data-lbl="why-oracle:culture-inclusion" href="/careers/diversity-inclusion/">Culture and Inclusion</a></li> <li><a data-lbl="why-oracle:security-pracitices" href="/corporate/security-practices/">Security Practices</a></li> </ul> </div> </div> <div class="u10w2"> <div class="u10w3"> <div class="u10ttl">Learn</div> <ul> <li><a data-lbl="learn:cloud-computing" href="/cloud/what-is-cloud-computing/">What is cloud computing?</a></li> <li><a data-lbl="learn:crm" href="/cx/what-is-crm/">What is CRM?</a></li> <li><a data-lbl="learn:docker" href="/cloud/cloud-native/container-registry/what-is-docker/">What is Docker?</a></li> <li><a data-lbl="learn:kubernetes" href="/cloud/cloud-native/kubernetes-engine/what-is-kubernetes/">What is Kubernetes?</a></li> <li><a data-lbl="learn:python" href="/developer/what-is-python-for-developers/">What is Python?</a></li> <li><a data-lbl="learn:saas" href="/applications/what-is-saas/">What is SaaS?</a></li> </ul> </div> </div> <div class="u10w2"> <div class="u10w3"> <div class="u10ttl">News and Events</div> <ul> <li><a data-lbl="newsandevents:news" href="/news/">News</a></li> <li><a data-lbl="newsandevents:oracle-cloudworld" href="/cloudworld/">Oracle CloudWorld</a></li> <li><a data-lbl="newsandevents:oracle-cloudworld-tour" href="/cloudworld-tour/">Oracle CloudWorld Tour</a></li> <li><a data-lbl="newsandevents:oracle-health-summit" href="/health/health-summit/">Oracle Health Summit</a></li> <li><a data-lbl="newsandevents:devlive" href="/developer/devlive/">Oracle DevLive</a></li> <li><a data-lbl="newsandevents:search-all-events" href="https://search.oracle.com/events?q=&lang=english">Search all events</a></li> </ul> </div> </div> <div class="u10w2"> <div class="u10w3"> <div class="u10ttl">Contact Us</div> <ul> <li><a href="tel:18006330738">US Sales: +1.800.633.0738</a></li> <li><a data-lbl="contact-us:how-can-we-help" href="/corporate/contact/">How can we help?</a></li> <li><a data-lbl="contact-us:subscribe-to-emails" href="https://go.oracle.com/subscriptions">Subscribe to emails</a></li> <li><a data-lbl="contact-us:integrity-helpline" href="https://secure.ethicspoint.com/domain/media/en/gui/31053/index.html">Integrity Helpline</a></li> <li><a data-lbl="contact-us:accessibility" href="/corporate/accessibility/">Accessibility</a></li> </ul> </div> </div> <div class="u10w4"> <hr /> </div> </nav> <div class="u10w11"> <ul class="u10-cr"> <li class="u10mtool" id="u10cmenu"> <a data-lbl="country-region" class="u10ticon u10regn" href="/universal-menu/#u10countrymenu">Country/Region</a> </li> </ul> <nav class="u10w5 u10w10" aria-label="Site info"> <ul class="u10-links"> <li></li> <li><a data-lbl="copyright" href="/legal/copyright.html">© 2024 Oracle</a></li> <li><a data-lbl="privacy" href="/legal/privacy/">Privacy</a><span>/</span><a data-lbl="do-not-sell-my-info" href="/legal/privacy/privacy-choices.html">Do Not Sell My Info</a></li> <li> <div id="teconsent"></div> </li> <li><a data-lbl="ad-choices" href="/legal/privacy/advertising-privacy-policy.html#adchoices">Ad Choices</a></li> <li><a data-lbl="careers" href="/corporate/careers/">Careers</a></li> </ul> </nav> <nav class="u10scl" aria-label="Social media links"> <ul class="scl-icons"> <li class="scl-facebook"><a data-lbl="scl-icon:facebook" href="https://www.facebook.com/Oracle/" target="_blank" title="Oracle on Facebook"></a></li> <li class="scl-twitter"><a data-lbl="scl-icon:twitter" href="https://twitter.com/oracle" target="_blank" title="Follow Oracle on Twitter"></a></li> <li class="scl-linkedin"><a data-lbl="scl-icon:linkedin" href="https://www.linkedin.com/company/oracle/" target="_blank" title="Oracle on LinkedIn"></a></li> <li class="scl-youtube"><a data-lbl="scl-icon:you-tube" href="https://www.youtube.com/oracle/" target="_blank" title="Watch Oracle on YouTube"></a></li> </ul> </nav> </div> </footer> <!-- /U10v6 --> <!-- END: oWidget_C/_Raw-Text/Display --> <!-- Container/Display Start --> <!-- BEGIN: oWidget_C/_Raw-Text/Display --> <!-- Start SiteCatalyst code --> <script language="JavaScript" src="https://www.oracleimg.com/us/assets/metrics/ora_ocom.js"></script> <!-- End SiteCatalyst code --> <!-- END: oWidget_C/_Raw-Text/Display --> <!-- Container/Display end --> <!-- end : ocom/common/global/components/g03-footer --> </div> <!-- Container/Display Start --> <!-- BEGIN: oWidget_C/_Raw-Text/Display --> <!-- www-us EndBodyAdminContainer --> <!--End--> <!-- END: oWidget_C/_Raw-Text/Display --> <!-- Container/Display end --> </body> <!-- end : Compass/Generic --> </html>