CINXE.COM
The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 376
<!-- ** BEGIN: header.jsp ** //--> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <link href="/includes/css/menu.css" rel="stylesheet" type="text/css"></link> <link href="/includes/css/style.css" rel="stylesheet" type="text/css"></link> <!--[if lt IE 6]><link href="/includes/css/style5.css" rel="stylesheet" type="text/css" ></link><![endif]--> <!--[if gte IE 5]><link href="/includes/css/style6.css" rel="stylesheet" type="text/css" ></link><![endif]--> <link href="/includes/css/tabs.css" rel="stylesheet" type="text/css"></link> <script type="text/javascript" src="/includes/scripts/tabs.js"></script> <script type="text/javascript" src="/includes/scripts/menu.js"></script> <title>The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 376</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script>!function(a){var e="https://s.go-mpulse.net/boomerang/",t="addEventListener";if("False"=="True")a.BOOMR_config=a.BOOMR_config||{},a.BOOMR_config.PageParams=a.BOOMR_config.PageParams||{},a.BOOMR_config.PageParams.pci=!0,e="https://s2.go-mpulse.net/boomerang/";if(window.BOOMR_API_key="UE9G5-FVEGY-MA38N-LMMNY-SBQP2",function(){function n(e){a.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}if(!a.BOOMR||!a.BOOMR.version&&!a.BOOMR.snippetExecuted){a.BOOMR=a.BOOMR||{},a.BOOMR.snippetExecuted=!0;var i,_,o,r=document.createElement("iframe");if(a[t])a[t]("load",n,!1);else if(a.attachEvent)a.attachEvent("onload",n);r.src="javascript:void(0)",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="width:0;height:0;border:0;display:none;",o=document.getElementsByTagName("script")[0],o.parentNode.insertBefore(r,o);try{_=r.contentWindow.document}catch(O){i=document.domain,r.src="javascript:var d=document.open();d.domain='"+i+"';void(0);",_=r.contentWindow.document}_.open()._l=function(){var a=this.createElement("script");if(i)this.domain=i;a.id="boomr-if-as",a.src=e+"UE9G5-FVEGY-MA38N-LMMNY-SBQP2",BOOMR_lstart=(new Date).getTime(),this.body.appendChild(a)},_.write("<bo"+'dy onload="document._l();">'),_.close()}}(),"".length>0)if(a&&"performance"in a&&a.performance&&"function"==typeof a.performance.setResourceTimingBufferSize)a.performance.setResourceTimingBufferSize();!function(){if(BOOMR=a.BOOMR||{},BOOMR.plugins=BOOMR.plugins||{},!BOOMR.plugins.AK){var e=""=="true"?1:0,t="",n="bdpnbeqxgqugcz2c6zva-f-71ed09152-clientnsv4-s.akamaihd.net",i="false"=="true"?2:1,_={"ak.v":"39","ak.cp":"1164872","ak.ai":parseInt("695954",10),"ak.ol":"0","ak.cr":2,"ak.ipv":4,"ak.proto":"http/1.1","ak.rid":"a5887222","ak.r":41725,"ak.a2":e,"ak.m":"dscx","ak.n":"essl","ak.bpcip":"8.222.208.0","ak.cport":47654,"ak.gh":"23.52.40.93","ak.quicv":"","ak.tlsv":"tls1.2","ak.0rtt":"","ak.0rtt.ed":"","ak.csrc":"-","ak.acc":"reno","ak.t":"1732441706","ak.ak":"hOBiQwZUYzCg5VSAfCLimQ==mXroQTz0ttserFDdjFdD3+yq7KE7OD0Dfgu9VMm2Tt8xmJvLLk0zMtZFC133LKhfnX+jevLm9K/coYYrQnFHrWU9lQQO9hrJlzYqepVxEwPSqpBiTIad7No06PfsZjLjVIgrshCgakyAOZgbVVbYGFc5mWLYG5oYVlWMPFRcuwPvrDNhOODn3nR2cLICVTIIGLzgr3k2Q5Ze+vHKhTzxXN0ypG2Ai9mc7os9+O8Mi2RkIc0cgwSI7rJa3gznUfh0sNoXs+lkgwTsQLy8ujUUTrPNowxUTWOukMUN344Cb5kVp3DVKc/kPZatKFT9RjVjtvM1vk6weOoCZScLOWO0mUNewxaVjXSuZFy2d7KPxR0ykRaZDfQauQ36SwZzYqP4xRNK/0Sp6uSA+i7ToBBY61h/wJavKzvzjWZMnKCVs/k=","ak.pv":"21","ak.dpoabenc":"","ak.tf":i};if(""!==t)_["ak.ruds"]=t;var o={i:!1,av:function(e){var t="http.initiator";if(e&&(!e[t]||"spa_hard"===e[t]))_["ak.feo"]=void 0!==a.aFeoApplied?1:0,BOOMR.addVar(_)},rv:function(){var a=["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(a)}};BOOMR.plugins.AK={akVars:_,akDNSPreFetchDomain:n,init:function(){if(!o.i){var a=BOOMR.subscribe;a("before_beacon",o.av,null,null),a("onbeacon",o.rv,null,null),o.i=!0}return this},is_complete:function(){return!0}}}}()}(window);</script></head> <body onload="P7_initPM(0,1,0,0,-1)"> <a name="top"></a> <div id="header"> <div id="logo"> <a href="/en/home/index"><img src="/images/spacer.gif" alt="Java Community Process" height="81" width="151"></a> </div> <div id="tools"> <div class="search"> <form name="search" action="/en/jsr/summary" method="get" onsubmit="return validate_search()"> <input name="id" value="Search JSRs" size="16" class="form" onfocus="nullify_if_equal(this, 'Search JSRs')" type="text"> <a href="javascript:document.search.submit()" onclick="return validate_search()"><img src="/images/button_go.gif" width="21" height="16" border="0" alt="Submit this Search" name="sub_search"></a> </form> </div> <div class="tools"> <a href="/en/press/pressroom">Press Room</a> | <a href="http://java.com/java/download/index.jsp?cid=jdp78399">Get Java Here</a> | <!-- <a href="javascript:void(0)">Print Format</a> | --> </div> </div> <div style="clear: right;"></div> <div class="topbar"><img src="/images/spacer.gif" alt="" height="3" width="154"></div> <div id="update"> </div> </div> <!-- ** BEGIN: Content Table ** //--> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <!-- ** BEGIN: Navigation Column ** //--> <td width="150" id="leftcontent" valign="top"> <!-- Navigation Placeholder //--> <div class="bar"><img src="/images/hr_dots1.gif" alt="" height="3" width="150"></div> <!-- begin find JSRs form --> <!-- IMPORTANT! do not convert this form to Struts < html : form > tag. javascript change of form.action property fails. --> <img src="/images/hd_find-jsrs.gif" alt="Find JSRs" height="18" width="150"> <form name="findjsr" action="/en/jsr/summary" method="get" class="pt5" onsubmit="return validate_findjsr()"> <input name="id" size="18" class="form" value="Search JSRs" onfocus="nullify_if_equal(this, 'Search JSRs')" type="text"> <a href="javascript:document.findjsr.submit()" onclick="return validate_findjsr()"><img src="/images/button_go.gif" width="21" height="16" border="0" alt="Submit this Search" name="sub_search"></a> </form><br><br> <!-- ** Menu Start ** //--> <ul id="p7PMnav"> <li><a href="/en/jsr/platform">JSRs by Platform</a></li> <li><a href="/en/jsr/tech">JSRs by Technology</a></li> <li><a href="/en/jsr/stage">JSRs by Stage</a></li> <li><a href="/en/jsr/ec">JSRs by Committee</a></li> <li><a href="/en/jsr/all">List of All JSRs</a></li> <!--end find JSRs form --> <div style="clear: both;"><img src="/images/spacer.gif" alt="" height="25" width="1"></div> <!--begin my JCP --> <img src="/images/hd_my-jcp.gif" alt="My JCP" height="18" width="150"> <form name="login" method="get" action="/en/user/login" > <input name="Sign-in" type="submit" title="Sign-in" value="Sign-in" /> </form> <div style="clear:both"><img src="/images/global/spacer.gif" width="1" height="3" alt=""></div> <div class="noNav"> <a href="/en/user/register">Register for Site</a> </div> <div class="bar"><img src="/images/hr_dots1.gif" alt="" height="3" width="150"></div> <div class="noNav" style="color: #666666; padding: 0;"> Use of JCP site is subject to the <a href="/en/home/terms" style="display:inline;padding: 0">JCP Terms of Use</a> and the <a href="http://www.oracle.com/us/legal/privacy/index.html" style="display:inline;padding: 0" href="">Oracle Privacy Policy</a> </div> <div style="clear:both"><img src="/images/global/spacer.gif" width="1" height="25" alt=""></div> <!--begin JCP info --> <img src="/images/hd_jcp-info.gif" alt="JCP Info" height="18" width="150"> <li><a href="/en/procedures/overview" class="p7PMtrg">About JCP</a> <ul> <li><a href="/en/procedures/overview">Program Overview</a></li> <li><a href="/en/procedures/jcp2">JCP Process Document</a></li> <li><a href="/en/whatsnew/calendar">Calendar</a></li> <li><a href="/en/participation/members">JCP Members</a></li> <li><a href="/en/participation/committee">Executive Committee</a></li> <li><a href="/en/whatsnew/elections">Elections</a></li> </ul> </li> <li><a href="/en/participation/overview" class="p7PMtrg">Get Involved</a> <ul> <li><a href="/en/participation/overview">Overview</a></li> <li><a href="/en/participation/membership">Becoming a JCP Member</a></li> <li><a href="/java-in-education">Java in Education</a></li> </ul> </li> <li><a href="/en/resources/contents" class="p7PMtrg">Community Resources</a> <ul> <li><a href="/en/resources/contents">Overview</a></li> <li><a href="/en/resources/tutorials">Tutorials</a></li> <li><a href="/en/resources/multimedia">JCP Podcasts</a></li> <li><a href="/en/resources/guide">Spec Lead Guide</a></li> <li><a href="/en/resources/tdk">TCK Tool & Info</a></li> <li><a href="/en/resources/license_reference">License Reference</a></li> </ul> </li> <li><a href="/en/press/pmo" class="p7PMtrg">Community News</a> <ul> <li><a href="/en/press/pmo">News</a></li> <li><a href="/en/press/news/awards/awards_main">Programs & Awards</a></li> <li><a href="/en/press/releases">Press Releases</a></li> <li><a href="/en/press/success">Success Stories</a></li> </ul> </li> <li><a href="/en/introduction/faq">FAQ</a></li> <li><a href="/en/resources/contacts">Contact Us</a></li> <div style="clear: both;"><img src="/images/spacer.gif" alt="" height="25" width="1"></div> <!--[if lte IE 6]><style>#p7PMnav a{height:1em;}#p7PMnav li{height:1em;float:left;clear:both;width:100%}</style><![endif]--> <!--[if IE 6]><style>#p7PMnav li{clear:none;}</style><![endif]--> <!--[if IE 7]><style>#p7PMnav a{zoom:100%;}#p7PMnav li{float:left;clear:both;width:100%;}</style><![endif]--> </ul> <!--begin ad space --> <div class="ads"> <a href="http://java.com/java/download/index.jsp?cid=jdp78399" target="_blank"><img style="display: ;" src="/images/ad_banner2.gif" alt="Ad Banner" border="1" height="70" width="150"></a> </div> <!--end ad space --> <!-- ** Menu End ** //--> <br> <br> <br> <br> <img src="/images/common/trans.gif" alt="" width="1" height="150"><br> </td> <!-- ** END: Navigation Column ** //--> <!-- ** BEGIN: Gutter Column ** //--> <td width="10" nowrap><img src="/images/common/trans.gif" alt="" width="10" height="1"></td> <!-- ** END: Gutter Column ** //--> <!-- ** BEGIN: Content Column ** //--> <td width="100%" valign="top"> <script type="text/javascript"> String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); } String.prototype.ltrim = function() { return this.replace(/^\s+/,""); } String.prototype.rtrim = function() { return this.replace(/\s+$/,""); } function validate_search() { if (document.search.id.value == "Search JSRs" || document.search.id.value.trim().length == 0) { alert("Search terms must be entered first"); return false; } return true; } function validate_findjsr() { if (document.findjsr.id.value == "Search JSRs" || document.findjsr.id.value.trim().length == 0) { alert("Search terms must be entered first"); return false; } return true; } function nullify_if_equal(field, str) { // alert("val=" + field.value); if (field.value == str) { field.value = ""; } } </script> <!-- ** END: header.jsp ** //--> <!-- BEGIN NAVIGATION TABS --> <div id="p7TP1"> <div class="p7TP_tabs"> <div id="p7tpb1_1" class="down"><a class="down">JSR</a></div> <div><a href="/en/egc/view?id=376">Community</a></div> <div><a href="/en/eg/eghome?id=376">Expert Group</a></div> <br class="p7TPclear" /> </div> <div class="p7TPcontent"> <div id="p7tpc1_1"> <a href="summary?id=376">Summary</a> | <a href="proposalDetails?id=376">Proposal</a> | <span>Detail (Summary & Proposal)</span> | <a href="nominations?id=376">Nominations</a> </div> </div> <!--[if lte IE 6]><style type="text/css">.p7TPpanel div,.p7TPpanel a{height:1%;}.p7TP_tabs a{white-space:nowrap;}</style><![endif]--> </div> <script type="text/javascript"> P7_initTP(1,0); </script> <!-- END NAVIGATION TABS --> <div class="anybar"><img src="/images/global/bar_green.gif" alt="" width="12" height="4"></div> <div class="header2">JSRs: Java Specification Requests</div> <div class="header1">JSR 376: Java<sup><font size="-2">TM</font></sup> Platform Module System</div> <div class="anybar"><img src="/images/global/bar_green.gif" alt="" width="12" height="4"></div> <br> <!-- ********************************************** --> <!-- JSR Status information --> <!-- ********************************************** --> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td id="centercontent" valign="top"> <tr> <td> <table class="tbl" cellpadding="4" cellspacing="1" width="100%"> <tr valign="top"> <td class="bdtl">Stage</td> <td class="bdtl">Access</td> <td class="bdtl">Start</td> <td class="bdtl">Finish</td> </tr> <tr class="bgw" valign="top"> <td>Final Release </td> <td><a href="https://jcp.org/aboutJava/communityprocess/final/jsr376/index.html">Download page</a></td> <td>21 Sep, 2017</td> <td> </td> </tr> <tr class="bgw" valign="top"> <td>Final Approval Ballot </td> <td><a href="results?id=6050">View results</a></td> <td>29 Aug, 2017</td> <td>11 Sep, 2017</td> </tr> <tr class="bgw" valign="top"> <td>Proposed Final Draft </td> <td><a href="https://jcp.org/aboutJava/communityprocess/pfd/jsr376/index.html">Download page</a></td> <td>01 Aug, 2017</td> <td> </td> </tr> <tr class="bgw" valign="top"> <td>Public Review Reconsideration Ballot </td> <td><a href="results?id=6016">View results</a></td> <td>13 Jun, 2017</td> <td>26 Jun, 2017</td> </tr> <tr class="bgw" valign="top"> <td>Public Review Ballot </td> <td><a href="results?id=5959">View results</a></td> <td>25 Apr, 2017</td> <td>08 May, 2017</td> </tr> <tr class="bgw" valign="top"> <td>Public Review </td> <td><a href="https://jcp.org/aboutJava/communityprocess/pr/jsr376/index-reconsider.html">Download page</a></td> <td>21 Mar, 2017</td> <td>20 Apr, 2017</td> </tr> <tr class="bgw" valign="top"> <td>Early Draft Review </td> <td><a href="https://jcp.org/aboutJava/communityprocess/edr/jsr376/index.html">Download page</a></td> <td>17 Jan, 2017</td> <td>16 Feb, 2017</td> </tr> <tr class="bgw" valign="top"> <td>JSR Renewal Ballot 2</td> <td><a href="results?id=5893">View results</a></td> <td>29 Nov, 2016</td> <td>12 Dec, 2016</td> </tr> <tr class="bgw" valign="top"> <td>JSR Renewal Ballot </td> <td><a href="results?id=5833">View results</a></td> <td>10 Nov, 2015</td> <td>23 Nov, 2015</td> </tr> <tr class="bgw" valign="top"> <td>Expert Group Formation </td> <td> </td> <td>23 Dec, 2014</td> <td>20 Jan, 2015</td> </tr> <tr class="bgw" valign="top"> <td>JSR Review Ballot </td> <td><a href="results?id=5739">View results</a></td> <td>09 Dec, 2014</td> <td>22 Dec, 2014</td> </tr> <tr class="bgw" valign="top"> <td>JSR Review </td> <td> </td> <td>25 Nov, 2014</td> <td>08 Dec, 2014</td> </tr> </table> </td> </tr> </td> </tr> </table> <!-- ********************************************** --> <!-- JCP Version --> <!-- ********************************************** --> <span style="padding: 10px; display: block;"> <b> Status: </b><a href="/en/introduction/glossary#status"><font color=black><span title="A JSR that has produced a Final Release milestone more than a year ago.">Final</span></font></a><br> <b>JCP version in use:</b> <a href="/procedures/jcp2_10"> 2.10</a><br> <b>Java Specification Participation Agreement version in use:</b> 2.0<br> <br><br> <b>Description</b>:<br> Define a module system for the Java Platform. <br><br> <!-- ********************************************** --> <!-- JSR Comments Email excluding JSR 900 and up --> <!-- ********************************************** --> <b>Expert Group Transparency:</b><br> <a href="http://openjdk.java.net/projects/jigsaw/spec">Public Project Page</a><br> <a href="http://openjdk.java.net/projects/jigsaw/spec">Public Communications</a><br> <a href="http://bugs.java.com">Issue Tracking</a><br> <br> </span> <!-- ****************************************** --> <div id="p7TP52"> <div class="p7TP_tabs2"> <div><span>Team</span></div> <br class="p7TPclear" /> </div> </div> <table bgcolor="#f2f2f2" border="0" cellpadding="5" cellspacing="1" width="100%"> <tr valign="top"> <td colspan="3"><span class="header4">Specification Leads</span></td> </tr> <tr valign="top"> <td width="20"><a href="/en/press/news/star"><img src="/images/jsr/stars-final-sml-anim-ir.gif" alt="Star Spec Lead" border="0" width="18" height="18" hspace="3" vspace="2"></a></td> <td>Mark Reinhold</td> <td>Oracle</td> </tr> <tr valign="top"> <td colspan="4" class="spacerw"><img src="/images/global/spacer.gif" alt="" height="1" width="1"></td> </tr> <tr valign="top"> <td colspan="3"><span class="header4">Expert Group</span></td> </tr> <tr valign="top"> <td width="20" nowrap> </td> <!-- Gutter //--> <td>Eclipse Foundation, Inc<br>: Wayne Beaton</td> <td>R閙i Forax</td> <td>Gradleware<br>: Hans Dockter</td> </tr> <tr valign="top"> <td width="20" nowrap> </td> <!-- Gutter //--> <td>IBM<br>: Tim Ellison</td> <td>Bob Lee</td> <td>Oracle<br>: Mark Reinhold</td> </tr> <tr valign="top"> <td width="20" nowrap> </td> <!-- Gutter //--> <td>Paremus<br>: Neil Bartlett</td> <td>Red Hat<br>: David Lloyd</td> <td>Robert Scholte</td> </tr> <tr valign="top"> <td colspan="4" class="spacerw"><img src="/images/global/spacer.gif" alt="" height="1" width="1"></td> </tr> <tr valign="top"> <td colspan="3"><span class="header4">Contributors</span></td> </tr> <tr valign="top"> <td width="20" nowrap> </td> <!-- Gutter //--> <td width="30%"> </td> <td width="30%"> </td> <td width="30%"> </td> </tr> </table> <!-- ********************************************** --> <!-- Expert Group Status --> <!-- ********************************************** --> <table cellpadding="0" cellspacing="0" border="0"> </table> <!-- ****************************************** --> <!-- ********************************************** --> <!-- JSRProposal Info --> <!-- ********************************************** --> <p> <a name="orig"><font size="+2">Original Java Specification Request (JSR)</font></a><p> <FONT SIZE="-1"> <!-- BEGIN-SUB TOPICS --> <A HREF="#1"> Identification</A> | <A HREF="#2"> Request</A> | <A HREF="#3"> Contributions</A> <BR> <!-- END-SUB TOPICS --> </FONT> <P> <!-- BEGIN TEMPLATE --> <!-- SECTION 1 --> <A NAME="1"></A> <P><FONT size=+2>Section 1. Identification</FONT> <P><b>Submitting Member:</b> Oracle </P> <P><b>Name of Contact Person:</b> Mark Reinhold </P> <P><b>E-Mail Address:</b> mark.reinhold<faketag>@</faketag>oracle.com</P> <P><b>Telephone Number:</b> +1 408 276 7256</P> <P><b>Fax Number:</b> -</P> <BR> <P><b>Specification Lead Member:</b> Oracle America, Inc.</P> <P><B>Specification Leads:</b> Mark Reinhold</P> <P><b>E-Mail Address:</b> mark.reinhold<faketag>@</faketag>oracle.com</P> <P><b>Telephone Number:</b> +1 408 276 7256</P> <P><b>Fax Number:</b> -</P> <BR> <P><B>Initial Expert Group Membership:</B> </P> <P>Tim Boudreau <br> Eclipse Foundation <br> Rémi Forax <br> Gradleware <br> IBM <br> Bob Lee <br> Oracle <br> Red Hat </P> <P><B>Supporting this JSR:</B> </P> <P> Tim Boudreau <br> Eclipse Foundation <br> Rémi Forax <br> Gradleware <br> IBM <br> Doug Lea <br> Bob Lee <br> London Java Community <br> Red Hat </p> <BR><BR> <!-- SECTION 2 --> <A NAME="2"></A> <P> <FONT SIZE="+2">Section 2: Request</FONT><P> </P> <H4>2.1 Please describe the proposed Specification:</H4> <P> This JSR will define an approachable yet scalable module system for the Java Platform. It will be approachable, <em>i.e.</em>, easy to learn and easy to use, so that developers can use it to construct and maintain libraries and large applications for both the Java SE and Java EE Platforms. It will be scalable so that it can be used to modularize the Java SE Platform itself, and its implementations. </P> <H4>2.2 What is the target Java platform? (i.e., desktop, server, personal, embedded, card, etc.)</H4> <P>Java SE, for use on embedded devices, laptops, desktops, and servers.</P> <H4>2.3 The Executive Committees would like to ensure JSR submitters think about how their proposed technology relates to all of the Java platform editions. Please provide details here for which platform editions are being targeted by this JSR, and how this JSR has considered the relationship with the other platform editions.</H4> <P>This JSR targets Java SE 9. We expect the module system to be leveraged by Java EE 9, so we will make sure to take Java EE requirements into account.</p> <p>This JSR will only define a module system. It will not authorize the modularization of the Java SE Platform, any other Java Platform Edition, or any other JSR. Such changes are beyond the scope of this JSR and must be carried out in some other, related JSR. We expect the modularization of the Java SE Platform to defined in the Java SE 9 Platform Umbrella JSR. </P> <H4>2.4 What need of the Java community will be addressed by the proposed specification?</H4> <P> The proposed specification will address two fundamental needs of large Java applications: Reliable configuration and strong encapsulation.</p> <ul> <li><p>Reliable configuration — Developers have long suffered with the brittle, error-prone class-path mechanism for configuring program components. The class path cannot express relationships between components, so if a necessary component is missing then that will not be discovered until an attempt is made to use it. The class path also allows classes in the same package to be loaded from different components, leading to unpredictable behavior and difficult-to-diagnose errors. The proposed specification will allow a component to declare that it depends upon other components, as other components depend upon it.</p></li> <li><p>Strong encapsulation — The access-control mechanism of the Java programming language and the Java virtual machine provides no way for a component to prevent other components from accessing its internal packages. The proposed specification will allow a component to declare which of its packages are accessible by other components, and which are not.</p></li> </ul> <p>By addressing these needs, the proposed specification will enable three further points of value for the Java community:</p> <ul> <li><p>A scalable platform — The ever-increasing size of the Java SE Platform has made it increasingly difficult to use in small devices despite the fact that many such devices are capable of running an SE-class Java virtual machine. The Compact Profiles introduced in <a href="http://openjdk.java.net/projects/jdk8/spec/">Java SE 8 (JSR 337)</a> help in this regard, but they are not nearly flexible enough. The proposed specification will allow the Java SE Platform, and its implementations, to be decomposed into a set of components which can be assembled by developers into custom configurations that contain only the functionality actually required by an application.</p></li> <li><p>Greater platform integrity — Casual use of APIs that are internal to Java SE Platform implementations is both a security risk and a maintenance burden. The strong encapsulation provided by the proposed specification will allow components that implement the Java SE Platform to prevent access to their internal APIs.</p></li> <li><p>Improved performance — Many ahead-of-time, whole-program optimization techniques can be more effective when it is known that a class can refer only to classes in a few other specific components rather than to any class loaded at run time. Performance is especially enhanced when the components of an application can be optimized in conjunction with the components that implement the Java SE Platform.</p></li> </ul> </P> <H4>2.5 Why isn't this need met by existing specifications?</H4> <P> The relevant existing specification in this space is <a href="https://jcp.org/en/jsr/detail?id=291">JSR 291</a>, which established the OSGi Service Platform R4 Core Specification in the JCP. OSGi is a rich and powerful dynamic-component framework which includes a module system, a life-cycle model, and a service registry.</p> <p>OSGi addresses the problem of reliable configuration but, since it builds on top of the Java SE Platform, it does not provide strong encapsulation. We intend in this JSR to consider changes to the Java programming language, the Java virtual machine, and the Java SE APIs so as to address all the needs listed above with improved usability, diagnosability, security, and performance.</p> <p>OSGi’s life-cycle and dynamic service-registry facilities are useful to some kinds of sophisticated applications but are beyond the scope of the needs outlined above. Those who require these facilities will still be able to run OSGi on top of Java SE 9 implementations. </P> <H4>2.6 Please give a short description of the underlying technology or technologies:</H4> <P> A Java program component is organized as a set of packages. With a <em>module system</em> the packages of a component are grouped into a <em>module</em> that governs how they use other modules, and how other modules use them. Modules are building blocks that allow an application to be composed from a set of components independently of the details of their implementations.</p> <p>A module is a named set of packages, resources, and native libraries. To control how its packages use other modules, a module declares which other modules are <em>required</em> in order to compile and run the code in its packages. To control how other modules use its packages, a module declares which of its packages are <em>exported</em>, and which are not.</p> <p>The module system locates required modules from the universe of <em>observable</em> modules and, unlike the class-path mechanism, ensures that different modules containing packages of the same name do not interfere with each other. The module system loads the code of required modules on behalf of the Java compiler or the Java virtual machine. After loading, the access-control mechanism of the Java language and the JVM prevents code from accessing packages that are not exported by their modules.</p> <p>To reduce coupling between modules, a module may declare that it <em>uses</em> an interface whose implementation will be <em>provided</em> at run time by some module. The module system binds implementations to interfaces and makes these bindings available via the existing <a href="http://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html"><code>java.util.ServiceLoader</code></a> API.</p> <p>The module system will provide the means for a platform to which it is applied, <em>e.g.</em>, Java SE or Java EE, to run existing libraries and applications without change, so long as such components use only standard platform APIs.</p> <p>Some members of the Java community have already invested significantly in applications and frameworks built on top of the OSGi Service Platform. The module system will provide a means for an OSGi kernel to locate Java modules and resolve them using its own resolver, except possibly for core system modules. This will enable OSGi bundles running in such a kernel to depend upon Java modules.</p> <p>The module system will, finally, satisfy the additional relevant requirements in the document <a href="http://openjdk.java.net/projects/jigsaw/goals-reqs"><em>Project Jigsaw: Goals & Requirements</em></a>, as amended and agreed by the Expert Group. </P> <H4>2.7 Is there a proposed package name for the API Specification? (i.e., <TT>javapi.something</TT>, <TT>org.something</TT>, etc.)</H4> <P> The module-system API will reside primarily in the new package <code>java.lang.module</code>. Related types in the existing <code>java.lang</code>, <code>java.lang.reflect</code>, and <code>javax.lang.model</code> packages and sub-packages will be defined or extended. </P> <H4>2.8 Does the proposed specification have any dependencies on specific operating systems, CPUs, or I/O devices that you know of?</H4> <P>No.</P> <H4>2.9 Are there any security issues that cannot be addressed by the current security model?</H4> <P>The foundations of the current security model are adequate, but the model will need to be extended so as to associate protection domains with modules. </P> <H4>2.10 Are there any internationalization or localization issues?</H4> <P>We expect the module system to provide a means to include localization data in modules so that it can be accessed via the existing <code>java.util.ResourceBundle</code> API. </P> <H4>2.11 Are there any existing specifications that might be rendered obsolete, deprecated, or in need of revision as a result of this work?</H4> <P> The Java Language Specification, the Java Virtual Machine Specification, and other elements of the Java SE Platform Specification will be revised by this JSR.</p> <p><a href="https://jcp.org/en/jsr/detail?id=277">JSRs 277 (Java Module System)</a> and <a href="https://jcp.org/en/jsr/detail?id=294">294 (Improved Modularity Support in the Java Programming Language)</a> will be superseded by this JSR, and hence will be withdrawn. </P> <H4>2.12 Please describe the anticipated schedule for the development of this specification.</H4> <P> Expert Group formation: December 2014 <br> Early Draft Review: June 2015 <br> Public Review: October 2015 <br> Proposed Final Draft: December 2015 <br> Final Release: March 2016 </P> <H4>2.13 Please describe the anticipated working model for the Expert Group working on developing this specification.</H4> <P> The Expert Group will work exclusively via e-mail, using a publicly-readable mailing list. </P> <H4>2.14 Provide detailed answers to the transparency checklist, making sure to include URLs as appropriate:</H4> <P><ul> <li><p>Is the schedule for the JSR publicly available, current, and updated regularly?</p> <p>We intend this to be the case.</p></li> <li><p>Can the public read and/or write to a wiki for the JSR?</p> <p>We do not plan to have a wiki as such, but there will be a well-known public home web page for the JSR.</p></li> <li><p>Is there a publicly accessible discussion board for the JSR that you read and respond to regularly?</p> <p>No, but there will be three public mailing lists (see 2.18, below).</p></li> <li><p>Have you spoken at conferences and events about the JSR recently?</p> <p>Yes; over the past two years this JSR has been discussed at the FOSDEM, JavaOne, Jfokus, and Devoxx conferences.</p></li> <li><p>Are you using open-source processes for the development of the RI and/or the TCK?</p> <p>The source code for the Reference Implementation will be developed in <a href="http://openjdk.java.net/projects/jigsaw/">Project Jigsaw</a> in the <a href="http://openjdk.java.net/">OpenJDK Community</a>. Early-access builds are <a href="http://openjdk.java.net/projects/jigsaw/ea">already available</a>.</p></li> <li><p>What are the Terms of Use required to use the collaboration tools you have prepared to use with the Expert Group, so that prospective EG members can judge whether they are compatible with the JSPA?</p> <p><a href="http://openjdk.java.net/legal/tou/">http://openjdk.java.net/legal/tou/</a></p></li> <li><p>What is the location of your publicly-accessible Issue list? In order to enable EC members to judge whether Issues have been adequately addressed, the list must make a clear distinction between Issues that are still open, Issues that have been deferred, and those that are closed, and must indicate the reason for any change of state.</p> <p><a href="https://bugs.openjdk.java.net/issues/?filter=21800">https://bugs.openjdk.java.net/issues/?filter=21800</a></p></li> <li><p>What is the mechanism for the public to provide feedback on your JSR?</p> <p>The public “comments” list (see 2.18, below).</p></li> <li><p>Where is the publicly-accessible document archive for your Expert Group?</p> <p>(See 2.20, below.)</p></li> <li><p>Does the Community tab for my JSR have links to and information about all public communication mechanisms and sites for the development of my JSR?</p> <p>We intend this to be the case.</p></li> <li><p>Do you have a Twitter account or other social networking feed which people can follow for updates on your JSR?</p> <p>Yes.</p></li> <li><p>Which specific areas of feedback should interested community members (such as the Adopt-a-JSR program) provide to improve the JSR (please also post this to your Community tab)?</p> <p>We are primarily interested in feedback on the usability of the module system.</p></li> </ul> </P> <H4>2.15 Please describe how the RI and TCK will de delivered, i.e. as part of a profile or platform edition, or stand-alone, or both. Include version information for the profile or platform in your answer. </H4> <P> The RI and TCK will be part of the RI and TCK for Java SE 9. </P> <H4>2.16 Please state the rationale if previous versions are available stand-alone and you are now proposing in 2.13 to only deliver RI and TCK as part of a profile or platform edition (See sections 1.1.5 and 1.1.6 of the JCP 2 document). </H4> <P>(Not applicable.)</P> <H4>2.17 Please provide a description of the business terms for the Specification, RI and TCK that will apply when this JSR is final.</H4> <P>The licenses for the <a href="/aboutJava/communityprocess/licenses/jsr376/JSR-376-Spec-Java-Platform-Module-System-1.0-11.18.14.docx">specification</a> and the <a href="/aboutJava/communityprocess/licenses/jsr376/SATCK-JSR-376-Java-Platform-Module-System-11.18.14.docx">TCK</a> are attached. The RI will be made available under the <a href="http://openjdk.java.net/legal/gplv2+ce.html">GNU General Public License, version 2, with the Classpath Exception</a>. <P> </P> <H4>2.18 Please describe the communications channel you have established for the public to observe Expert Group deliberations, provide feedback, and view archives of all Expert Group communications.</H4> <P>We intend to implement a trio of mailing lists in an approach already used by earlier JSRs, including that for <a href="http://openjdk.java.net/projects/jdk8/spec/">Java SE 8 (JSR 337)</a>:</p> <ul> <li><p>Expert Group discussions will be carried out on an “experts” mailing list, limited to Expert Group members.</p></li> <li><p>The “observers” list will be for those who wish to monitor and, perhaps, discuss the EG’s progress. Messages sent to the “experts” list will automatically be forwarded to this list. Anyone may subscribe to this list, and any subscriber may post. EG members are under no obligation to follow the traffic on this list.</p></li> <li><p>The “comments” list will be for sending comments, suggestions, and other feedback directly to the EG. Only EG members may subscribe to this list, but anyone may post. The EG will read all messages sent to this list, and will record feedback in the issue tracker as appropriate.</p></li> </ul> <p>The archives of all of these lists will be publicly readable.</P> <H4>2.19 What is the URL of the Issue Tracker that the public can read, and how does the public log issues in the Issue Tracker?</H4> <P>We intend to use the OpenJDK bug system at <a href="http://bugs.openjdk.java.net">http://bugs.openjdk.java.net</a>.</p> <p>The OpenJDK bug system is writable only by OpenJDK Contributors. Others may log issues into that system by sending feedback to the “comments” list, or by submitting issues via <a href="http://bugs.java.com">bugs.java.com</a>. </P> <H4>2.20 Please provide the location of the publicly accessible document archive you have created for the Expert Group.</H4> <P> <a href="http://openjdk.java.net/projects/jigsaw/spec/">http://openjdk.java.net/projects/jigsaw/spec/</a> </P> <BR><BR> <BR><BR> <!-- SECTION 3 --> <A NAME="3"></A> <P> <FONT SIZE="+2">Section 3: Contributions</FONT><P> </P> <H4>3.1 Please list any existing documents, specifications, or implementations that describe the technology. Please include links to the documents if they are publicly available.</H4> <P> This JSR is a central component of <a href="http://openjdk.java.net/projects/jigsaw/">Project Jigsaw</a>, a long-running effort in the <a href="http://openjdk.java.net/">OpenJDK Community</a> to design and implement a standard module system for the Java SE Platform and to apply that system to the Platform itself and to its Reference Implementation, the JDK. Relevant documents include:</p> <ul> <li><p><a href="http://openjdk.java.net/projects/jigsaw/goals-reqs"><em>Project Jigsaw: Goals & Requirements</em></a> lays out the goals and requirements of the overall effort.</p></li> <li><p>In Project Jigsaw we have already made progress on other key aspects of the effort, as documented in a series of <a href="http://openjdk.java.net/jeps/0">JDK Enhancement Proposals (JEPs)</a>:</p> <ul><li>A modular structure for the JDK has been proposed (<a href="http://openjdk.java.net/jeps/200">JEP 200</a>),</li> <li>The JDK source code has been modularized (<a href="http://openjdk.java.net/jeps/201">JEP 201</a>), and</li> <li>The format of JDK binary images is being upgraded to accommodate modules (<a href="http://openjdk.java.net/jeps/220">JEP 220</a>).</li></ul> <p>Some of these changes have already been merged into <a href="http://openjdk.java.net/projects/jdk9">JDK 9</a>, the prototype Java SE 9 Reference Implementation, and <a href="http://openjdk.java.net/projects/jigsaw/ea">early-access builds</a> are available for testing.</p></li> <li><p>In an earlier <a href="http://openjdk.java.net/projects/jigsaw/exploratory-phase">exploratory phase</a> of Project Jigsaw we investigated and prototyped various ideas in the context of an earlier <a href="http://openjdk.java.net/projects/jigsaw/doc/draft-java-module-system-requirements-12">draft set of requirements</a>.</p></li> </ul> </P> <H4>3.2 Explanation of how these items might be used as a starting point for the work.</H4> <P> The detailed goals and requirements of the overall modularization effort have been discussed publicly for many years. They were most recently refined and documented in the above-mentioned <a href="http://openjdk.java.net/projects/jigsaw/goals-reqs"><em>Goals & Requirements</em></a> document, which was published and discussed in July 2014.</p> <p>Expert Group members are expected to be familiar with that document and agree, in principle, with its stated goals and constraints. The EG will begin its work by reviewing the requirements in that document relevant to the module system and, if necessary, proposing and agreeing upon revisions thereto.</p> <p>An initial specification and prototype implementation intended to meet the revised requirements will then be provided by the Specification Lead to serve as the starting points of this JSR’s Specification and Reference Implementation.</p> <p>Related work described in the aforementioned JEPs and earlier work done in the <a href="http://openjdk.java.net/projects/jigsaw/exploratory-phase">exploratory phase</a> of Project Jigsaw may further inform the EG’s discussions. </P> <BR><BR>牋 </p> <!-- ** BEGIN: footer.jsp ** //--> </td> </tr> </table> <!-- ** END: Content Table ** //--> <!-- ** BEGIN: Footer Table ** //--> <div id="footer" style="clear: both;"> <div class="footleft"> <a href="/en/resources/contacts">Contact Us</a> </div> <div class="botbar"><img src="/images/spacer.gif" alt="" height="23" width="1"></div> <div class="footleft2"> © 2024, Oracle Corporation and/or its affiliates. <a href="/en/home/terms">Terms of Use</a>. <a href="http://www.oracle.com/us/legal/privacy/index.html">Privacy Policy</a>. <a href="http://www.oracle.com/us/legal/third-party-trademarks/third-party-trademarks-078568.html">Trademarks</a> </div> <div class="footright"> <img src="/images/common/logo_oracle_footer.gif" alt="Oracle Corporation" height="22" width="91"> </div> <div style="clear: both;"><img src="/images/spacer.gif" alt="" height="30" width="1"></div> </div> <!-- ** END: Footer Table ** //--> <!-- ** Menu Start ** //--> </body> </html> <!-- ** END: footer.jsp ** //-->