blob: dd7a1f45ad2b408fb6e080e8c5d32bc9194d7847 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.9) on Wed Nov 04 12:15:18 CST 2020 -->
<title>LibExtClassLoaderHelper (Jetty :: Project 9.4.34.v20201102 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2020-11-04">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="LibExtClassLoaderHelper (Jetty :: Project 9.4.34.v20201102 API)";
}
}
catch(err) {
}
//-->
var data = {"i0":9,"i1":9,"i2":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../../../";
var useModuleDirectories = false;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LibExtClassLoaderHelper.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.eclipse.jetty.osgi.boot.internal.webapp</a></div>
<h2 title="Class LibExtClassLoaderHelper" class="title">Class LibExtClassLoaderHelper</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.eclipse.jetty.osgi.boot.internal.webapp.LibExtClassLoaderHelper</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">LibExtClassLoaderHelper</span>
extends java.lang.Object</pre>
<div class="block">LibExtClassLoaderHelper
<p>
Helper to create a URL class-loader with the jars inside
<code>${jetty.home}/lib/ext</code> and <code>${jetty.home}/resources</code>. In an ideal world, every
library is an OSGi bundle that does loads nicely. To support standard jars or
bundles that cannot be loaded in the current OSGi environment, we support
inserting the jars in the usual jetty/lib/ext folders in the proper classpath
for the webapps.
<p>
The drawback is that those jars will not be available in the OSGi
classloader.
<p>
Alternatives to placing jars in lib/ext:
<ol>
<li>Bundle the jars in an osgi bundle. Have the webapp(s) that need these jars
depend on that bundle.</li>
<li>Bundle those jars in an osgi bundle-fragment that targets the
jetty-bootstrap bundle</li>
<li>Use equinox Buddy-Policy: register a buddy of the jetty bootstrapper
bundle. (Note: it will work only on equinox)</li>
</ol></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="LibExtClassLoaderHelper.IFilesInJettyHomeResourcesProcessor.html" title="interface in org.eclipse.jetty.osgi.boot.internal.webapp">LibExtClassLoaderHelper.IFilesInJettyHomeResourcesProcessor</a></span></code></th>
<td class="colLast">
<div class="block">IFilesInJettyHomeResourcesProcessor
Interface for callback impls</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.util.Set&lt;<a href="LibExtClassLoaderHelper.IFilesInJettyHomeResourcesProcessor.html" title="interface in org.eclipse.jetty.osgi.boot.internal.webapp">LibExtClassLoaderHelper.IFilesInJettyHomeResourcesProcessor</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registeredFilesInJettyHomeResourcesProcessors">registeredFilesInJettyHomeResourcesProcessors</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">LibExtClassLoaderHelper</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static java.lang.ClassLoader</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createLibEtcClassLoader(java.io.File,java.lang.ClassLoader)">createLibEtcClassLoader</a></span>&#8203;(java.io.File&nbsp;jettyHome,
java.lang.ClassLoader&nbsp;parentClassLoader)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static java.lang.ClassLoader</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createLibExtClassLoader(java.util.List,java.util.List,java.lang.ClassLoader)">createLibExtClassLoader</a></span>&#8203;(java.util.List&lt;java.io.File&gt;&nbsp;jarsContainerOrJars,
java.util.List&lt;java.net.URL&gt;&nbsp;otherJarsOrFolder,
java.lang.ClassLoader&nbsp;parentClassLoader)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#processFilesInResourcesFolder(java.io.File,java.util.Map)">processFilesInResourcesFolder</a></span>&#8203;(java.io.File&nbsp;jettyHome,
java.util.Map&lt;java.lang.String,&#8203;java.io.File&gt;&nbsp;childrenFiles)</code></th>
<td class="colLast">
<div class="block">When we find files typically used for central logging configuration we do
what it takes in this method to do what the user expects.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="registeredFilesInJettyHomeResourcesProcessors">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>registeredFilesInJettyHomeResourcesProcessors</h4>
<pre>public static final&nbsp;java.util.Set&lt;<a href="LibExtClassLoaderHelper.IFilesInJettyHomeResourcesProcessor.html" title="interface in org.eclipse.jetty.osgi.boot.internal.webapp">LibExtClassLoaderHelper.IFilesInJettyHomeResourcesProcessor</a>&gt; registeredFilesInJettyHomeResourcesProcessors</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>LibExtClassLoaderHelper</h4>
<pre>public&nbsp;LibExtClassLoaderHelper()</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="createLibEtcClassLoader(java.io.File,java.lang.ClassLoader)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createLibEtcClassLoader</h4>
<pre class="methodSignature">public static&nbsp;java.lang.ClassLoader&nbsp;createLibEtcClassLoader&#8203;(java.io.File&nbsp;jettyHome,
java.lang.ClassLoader&nbsp;parentClassLoader)
throws java.net.MalformedURLException</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>jettyHome</code> - the jetty home</dd>
<dd><code>parentClassLoader</code> - the parent classloader</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a url classloader with the jars of resources, lib/ext and the
jars passed in the other argument. The parent classloader usually
is the JettyBootStrapper (an osgi classloader.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.net.MalformedURLException</code> - if the jetty home reference is invalid</dd>
</dl>
</li>
</ul>
<a id="createLibExtClassLoader(java.util.List,java.util.List,java.lang.ClassLoader)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createLibExtClassLoader</h4>
<pre class="methodSignature">public static&nbsp;java.lang.ClassLoader&nbsp;createLibExtClassLoader&#8203;(java.util.List&lt;java.io.File&gt;&nbsp;jarsContainerOrJars,
java.util.List&lt;java.net.URL&gt;&nbsp;otherJarsOrFolder,
java.lang.ClassLoader&nbsp;parentClassLoader)
throws java.net.MalformedURLException</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>jarsContainerOrJars</code> - the jars via file references</dd>
<dd><code>otherJarsOrFolder</code> - more jars via url references</dd>
<dd><code>parentClassLoader</code> - the parent classloader</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a url classloader with the jars of resources, lib/ext and the
jars passed in the other argument. The parent classloader usually
is the JettyBootStrapper (an osgi classloader). If there was no
extra jars to insert, then just return the parentClassLoader.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.net.MalformedURLException</code> - if there is a bad jar file reference</dd>
</dl>
</li>
</ul>
<a id="processFilesInResourcesFolder(java.io.File,java.util.Map)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>processFilesInResourcesFolder</h4>
<pre class="methodSignature">protected static&nbsp;void&nbsp;processFilesInResourcesFolder&#8203;(java.io.File&nbsp;jettyHome,
java.util.Map&lt;java.lang.String,&#8203;java.io.File&gt;&nbsp;childrenFiles)</pre>
<div class="block">When we find files typically used for central logging configuration we do
what it takes in this method to do what the user expects. Without
depending too much directly on a particular logging framework.
<p>
We can afford to do some implementation specific code for a logging
framework only in a fragment.
<p>
Trying to configure log4j and logback in here.
<p>
We recommend that slf4j jars are all placed in the osgi framework. And a
single implementation if possible packaged as an osgi bundle is there.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>jettyHome</code> - the jetty home reference</dd>
<dd><code>childrenFiles</code> - the map of child files</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LibExtClassLoaderHelper.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 1995&#x2013;2020 <a href="https://webtide.com">Webtide</a>. All rights reserved.</small></p>
</footer>
</body>
</html>