<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> 
        <base href="https://issues.shibboleth.net/jira"> 
        <title>Message Title</title> 
    </head> 
    <body class="jira" style="color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429"> 
        <table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt" bgcolor="#f5f5f5"> 
            <!-- header here --> 
            <tbody>
                <tr> 
                    <td id="header-pattern-container" style="padding: 0px; border-collapse: collapse; padding: 10px 20px"> 
                        <table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                            <tbody>
                                <tr> 
                                    <td id="header-avatar-image-container" valign="top" style="padding: 0px; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px" width="32"> <img id="header-avatar-image" class="image_fix" src="cid:jira-generated-image-avatar-704fa668-7de6-4b2c-a68d-4f440f57ab76" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top"> </td> 
                                    <td id="header-text-container" valign="middle" style="padding: 0px; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="rdw@iay.org.uk" id="email_rdw@iay.org.uk" href="https://issues.shibboleth.net/jira/secure/ViewProfile.jspa?name=rdw%40iay.org.uk" style="color:#0052cc;; color: #3b73af; text-decoration: none">Rod Widdowson</a> <strong>commented</strong> on <a href="https://issues.shibboleth.net/jira/browse/IDP-1711" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-avatar-a07bdae3-d166-47bd-9e5c-a50d1c83284a" height="16" width="16" border="0" align="absmiddle" alt="Sub-task"> IDP-1711</a> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="email-content-container" style="padding: 0px; border-collapse: collapse; padding: 0 20px"> 
                        <table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing: 0; border-collapse: separate"> 
                            <tbody>
                                <tr> 
                                    <!-- there needs to be content in the cell for it to render in some clients --> 
                                    <td class="email-content-rounded-top mobile-expand" style="padding: 0px; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 15px; background-color: #ffffff; border-left: 1px solid #cccccc; border-top: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly" height="10" bgcolor="#ffffff"> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> 
                                        <table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                            <tbody>
                                                <tr> 
                                                    <td style="vertical-align: top;; padding: 0px; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" class="page-title-pattern-header-container"> <span class="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="https://issues.shibboleth.net/jira/browse/IDP-1711" style="color: #3b73af; text-decoration: none">Re: Use Scripting as an example for shadowing</a> </span> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td id="text-paragraph-pattern-top" class="email-content-main mobile-expand  comment-top-pattern" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff; border-bottom: none; padding-bottom: 0" bgcolor="#ffffff"> 
                                        <table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
                                            <tbody>
                                                <tr> 
                                                    <td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0px; border-collapse: collapse; padding: 0 0 10px 0"> <h3 style="margin: 10px 0 0 0; margin-top: 0; font-size: 16px; line-height: 1.563; margin: 30px 0 0 0; margin-top: 0"><a name="Firstthoughts%3ATL%3BDR%3Atoofragile" style="color: #3b73af; text-decoration: none"></a>First thoughts: TL;DR: too fragile</h3> <p style="margin: 10px 0 0 0">I spent a little time this afternoon kicking the wheels with shadowing (the maven "shade" plugin) with especial regard to plugins.</p> <p style="margin: 10px 0 0 0">The first take away is that the documentation is weird, there is no way to bootstrap your knowledge.  They just have examples.</p> <p style="margin: 10px 0 0 0">The next take away is that this is in many ways related to the whole dependency thing.  What you are actually doing is creating a new jar file (called the Uber-jar) which contains all the dependencies in it so your dependencies matter.  And so (by extension) so do all the dependencies you don't want that you inherit via the parent project.  The following was an exclude file for all the jar files that it wanted to include for the rhino plugin (who's stated dependencies are "rhino.jar" and "scripting-api.jar"), </p> 
                                                        <div class="code panel" style="border-width: 1px;; border: 1px solid #cccccc; background: #f5f5f5; font-size: 12px; line-height: 1.333; font-family: monospace; border: 1px solid #cccccc; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; margin: 9px 0">
                                                            <div class="codeContent panelContent" style="padding: 9px 12px"> 
                                                                <pre class="code-xml" style="margin: 10px 0 0 0; margin-top: 0; max-height: 30em; overflow: auto; white-space: pre-wrap; word-wrap: normal">
<span class="code-tag" style="color: #000091"><excludes></span>
    <span class="code-tag" style="color: #000091"><exclude></span>org.glassfish:jakarta.json<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"><exclude></span>jakarta.xml.bind:jakarta.xml.bind-api<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"><exclude></span>jakarta.xml.bind:jakarta.xml<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"><exclude></span>org.glassfish.jaxb:jaxb-runtime<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"><exclude></span>org.glassfish.jaxb:txw2<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"><exclude></span>com.sun.istack:istack-commons-runtime<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"><exclude></span>org.jvnet.staxex:stax-ex<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"><exclude></span>com.sun.xml.fastinfoset:FastInfoset<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"><exclude></span>org.apache.ant:ant:jar<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"><exclude></span>org.apache.ant:ant-launcher<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"><exclude></span>ch.qos.logback:logback-core<span class="code-tag" style="color: #000091"></exclude></span>
<span class="code-tag" style="color: #000091"></excludes></span>
</pre> 
                                                            </div>
                                                        </div> <p style="margin: 10px 0 0 0"> <tt>com.sun.istack</tt>? I don't even want to think.</p> <p style="margin: 10px 0 0 0">Anyway, with that in place you can start thinking about relocating the class files (which is what this Is really about) and this is where I begin to have concerns: Bottom line:  you probably only want to rename classes if you control them - and then why would you do that?</p> <p style="margin: 10px 0 0 0">I originally just shadowed out the scripting API class. This is basically just a three classes to do the heavy lifting when interfacing with JSR-223. This was quite easy to do and appeared to work (I didn't test too much but it looked OK). This all works because I don't have anything which is a hard coded class path in this module and I know this because I wrote it. In particular the jar file consists of three class files and no text files (and particularly nothing beyond the manifest in META-INF) . This was what was needed to move these classes</p> 
                                                        <div class="code panel" style="border-width: 1px;; border: 1px solid #cccccc; background: #f5f5f5; font-size: 12px; line-height: 1.333; font-family: monospace; border: 1px solid #cccccc; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; margin: 9px 0">
                                                            <div class="codeContent panelContent" style="padding: 9px 12px"> 
                                                                <pre class="code-xml" style="margin: 10px 0 0 0; margin-top: 0; max-height: 30em; overflow: auto; white-space: pre-wrap; word-wrap: normal">
<span class="code-tag" style="color: #000091"><relocation></span>
    <span class="code-tag" style="color: #000091"><pattern></span>net.shibboleth.idp.plugin.scripting<span class="code-tag" style="color: #000091"></pattern></span>
    <span class="code-tag" style="color: #000091"><shadedPattern></span>net.shibboleth.idp.plugin.scripting.shaded.rhino.api<span class="code-tag" style="color: #000091"></shadedPattern></span>
    <span class="code-tag" style="color: #000091"><excludes></span>
        <span class="code-tag" style="color: #000091"><exclude></span>net.shibboleth.idp.plugin.scripting.rhino.*<span class="code-tag" style="color: #000091"></exclude></span>
    <span class="code-tag" style="color: #000091"></excludes></span>
<span class="code-tag" style="color: #000091"></relocation></span>
</pre> 
                                                            </div>
                                                        </div> <p style="margin: 10px 0 0 0">But when I looked to include rhino.jar it all began to fall apart.</p> <p style="margin: 10px 0 0 0">In order to do a rename I need to have an idea of the from module names and the to names. So I had to crack open the jar file and look to see that there were two "top level" packages: "org.mozilla,javascript" and a "org.mozilla.classfile" I suppose I could have looked at "org.mozilla" but I like keeping things constrained.</p> 
                                                        <div class="code panel" style="border-width: 1px;; border: 1px solid #cccccc; background: #f5f5f5; font-size: 12px; line-height: 1.333; font-family: monospace; border: 1px solid #cccccc; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; margin: 9px 0">
                                                            <div class="codeContent panelContent" style="padding: 9px 12px"> 
                                                                <pre class="code-xml" style="margin: 10px 0 0 0; margin-top: 0; max-height: 30em; overflow: auto; white-space: pre-wrap; word-wrap: normal">
<span class="code-tag" style="color: #000091"><relocation></span>
    <span class="code-tag" style="color: #000091"><pattern></span>org.mozilla.javascript<span class="code-tag" style="color: #000091"></pattern></span>
    <span class="code-tag" style="color: #000091"><shadedPattern></span>net.shibboleth.idp.plugin.scripting.shaded.rhino.javascript<span class="code-tag" style="color: #000091"></shadedPattern></span>
<span class="code-tag" style="color: #000091"></relocation></span>
<span class="code-tag" style="color: #000091"><relocation></span>
    <span class="code-tag" style="color: #000091"><pattern></span>org.mozilla.classfile<span class="code-tag" style="color: #000091"></pattern></span>
    <span class="code-tag" style="color: #000091"><shadedPattern></span>net.shibboleth.idp.plugin.scripting.shaded.rhino.classfile<span class="code-tag" style="color: #000091"></shadedPattern></span>
<span class="code-tag" style="color: #000091"></relocation></span></pre> 
                                                            </div>
                                                        </div> <p style="margin: 10px 0 0 0">But what really concerned me was that that jar file contains files which are not .class files: HTML and PROPERTIES also XML files and the like. AFAICS the thing is that without reading every line of code I don't know whether these are being accessed via</p> <p style="margin: 10px 0 0 0"><tt>      this.getClass().getReourceAsStream(relativePathAsString)</tt> in which case the file needs to be renamed</p> <p style="margin: 10px 0 0 0">or<br> <tt>       this.getClass().getReourceAsStream(absolutePathAsString)</tt> in which case the file <b>MUST NOT</b> be renamed</p> <p style="margin: 10px 0 0 0">or both.</p> <p style="margin: 10px 0 0 0">Further just because it worked in this release doesn't mean it will work in the next - or that the rename tree will look the same.</p> <p style="margin: 10px 0 0 0">So my feeling is that this is real cute and helps my situation (where I control the common jar file) but this might well be a maintenance nightmare and a can of worms I'd sooner avoid. YMMV and so on of course.</p> <h4 style="margin: 10px 0 0 0; font-size: 14px; line-height: 1.500; margin: 20px 0 0 0"><a name="Finally." style="color: #3b73af; text-decoration: none"></a>Finally.</h4> <p style="margin: 10px 0 0 0">Remember what I said up at the top about it being like dependencies?  This is going to bite in a "shadow some" world.</p> <p style="margin: 10px 0 0 0">The shadowing plugin treats compile dependencies as potential inputs.  But so do we.  So in our pom we would be potentially putting the same contents into the uber jar as well as the <tt>dependencies</tt> folder.  So we then need to crack open the packaging in the distribution pom to exclude all the jar files which have been shadowed, which introduces another fragility point.</p> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> 
                                        <table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="actions-pattern-container" valign="middle" style="padding: 0px; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0"> 
                                                        <table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                                            <tbody>
                                                                <tr> 
                                                                    <td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0; vertical-align: middle"> <a href="https://issues.shibboleth.net/jira/browse/IDP-1711#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-25e97e42-e669-4cc5-b371-d99809fe4afc" alt="Add Comment" title="Add Comment" height="16" width="16" border="0" style="vertical-align: middle"> </a> </td> 
                                                                    <td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="https://issues.shibboleth.net/jira/browse/IDP-1711#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a> </td> 
                                                                </tr> 
                                                            </tbody>
                                                        </table> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <!-- there needs to be content in the cell for it to render in some clients --> 
                                <tr> 
                                    <td class="email-content-rounded-bottom mobile-expand" style="padding: 0px; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #ffffff; border-top: 0; border-left: 1px solid #cccccc; border-bottom: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly" height="5" bgcolor="#ffffff"> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="footer-pattern" style="padding: 0px; border-collapse: collapse; padding: 12px 20px"> 
                        <table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                            <tbody>
                                <tr> 
                                    <td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; border-collapse: collapse; color: #999999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px"> This message was sent by Atlassian Jira <span id="footer-build-information">(v8.5.4#805004-<span title="0444eab799707f9ad7b248d69f858774aadfd250" data-commit-id="0444eab799707f9ad7b248d69f858774aadfd250}">sha1:0444eab</span>)</span> </td> 
                                    <td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0px; border-collapse: collapse; padding-left: 20px; vertical-align: top"> 
                                        <table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="footer-pattern-logo-desktop-padding" style="padding: 0px; border-collapse: collapse; padding-top: 3px"> <img id="footer-pattern-logo-desktop" src="https://issues.shibboleth.net/jira/images/mail/atlassian-email-logo.png" alt="Atlassian logo" title="Atlassian logo" width="191" height="24" class="image_fix"> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
            </tbody>
        </table>   
    </body>
</html>