ClasspathAndLoadPath

headius edited this page Nov 17, 2014 · 6 revisions

Classpath and Load Path

Prior to JRuby 1.1, Java's Classpath (CLASSPATH) and Ruby's Load Path were largely separate. This document describes the unification of the two paths in JRuby 1.1.

Load Path

JRuby supports the concept of a "load path" as per Ruby 1.8. The load path contains filesystem directories to be used as the "root" when searching for scripts to load or execute.

Script files contained within the load path can be loaded using the require or load kernel methods. The differences between these two mechanisms are discussed in more depth in RubySpec.

Load path is a lazier, more implicit form of pathing than Java's classpath, since libraries on the load path must still be explicitly loaded to become available.

Classpath

Java applications have their own path logic used for locating .class files, called the ''classpath''. The classpath is typically set up through the CLASSPATH environment variable or passed to the java command using -cp or -classpath with a delimited list of filesystem locations.

Classpath entries typically must contain one of two things:

  • The root from which a directory structure containing class files can be searched.
  • A JAR file containing that same structure.

Classpath is a more explicit form of pathing than load path, since everything in the classpath can be referenced from compiled code. No load step is needed, though the JVM will perform a load-on-demand as class dependencies require.

Classpath and Load Path Unification

Because the operation of Java's classpath and Ruby's load path are so similar, especially under JRuby, they are unified in JRuby 1.1. This results in a number of unified capabilities:

  • Everything in the Ruby load path is considered to be a classpath entry, so .class files under load path hierarchies are automatically available to be referenced from code.
  • Everything in the Java classpath is considered to be a load path entry, so .rb scripts, for example, contained in JAR files, are loadable.
  • Structures specific to the Java classpath (such as JAR files and remote URLs) can be specified as load path entries. This allows explicitly adding JAR files and remote servers locations to the JRuby load path, as though they were local paths.

Largely, this unification is intended to make it simpler to work with hybrid applications, where some code is in Ruby and some is in Java, and especially cases where Ruby code is being pre-compiled to Java bytecode and straddles the two worlds.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

ClasspathAndLoadPath

headius edited this page Nov 17, 2014 · 6 revisions

Classpath and Load Path

Prior to JRuby 1.1, Java's Classpath (CLASSPATH) and Ruby's Load Path were largely separate. This document describes the unification of the two paths in JRuby 1.1.

Load Path

JRuby supports the concept of a "load path" as per Ruby 1.8. The load path contains filesystem directories to be used as the "root" when searching for scripts to load or execute.

Script files contained within the load path can be loaded using the require or load kernel methods. The differences between these two mechanisms are discussed in more depth in RubySpec.

Load path is a lazier, more implicit form of pathing than Java's classpath, since libraries on the load path must still be explicitly loaded to become available.

Classpath

Java applications have their own path logic used for locating .class files, called the ''classpath''. The classpath is typically set up through the CLASSPATH environment variable or passed to the java command using -cp or -classpath with a delimited list of filesystem locations.

Classpath entries typically must contain one of two things:

  • The root from which a directory structure containing class files can be searched.
  • A JAR file containing that same structure.

Classpath is a more explicit form of pathing than load path, since everything in the classpath can be referenced from compiled code. No load step is needed, though the JVM will perform a load-on-demand as class dependencies require.

Classpath and Load Path Unification

Because the operation of Java's classpath and Ruby's load path are so similar, especially under JRuby, they are unified in JRuby 1.1. This results in a number of unified capabilities:

  • Everything in the Ruby load path is considered to be a classpath entry, so .class files under load path hierarchies are automatically available to be referenced from code.
  • Everything in the Java classpath is considered to be a load path entry, so .rb scripts, for example, contained in JAR files, are loadable.
  • Structures specific to the Java classpath (such as JAR files and remote URLs) can be specified as load path entries. This allows explicitly adding JAR files and remote servers locations to the JRuby load path, as though they were local paths.

Largely, this unification is intended to make it simpler to work with hybrid applications, where some code is in Ruby and some is in Java, and especially cases where Ruby code is being pre-compiled to Java bytecode and straddles the two worlds.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ClasspathAndLoadPath

headius edited this page Nov 17, 2014 · 6 revisions

Classpath and Load Path

Prior to JRuby 1.1, Java's Classpath (CLASSPATH) and Ruby's Load Path were largely separate. This document describes the unification of the two paths in JRuby 1.1.

Load Path

JRuby supports the concept of a "load path" as per Ruby 1.8. The load path contains filesystem directories to be used as the "root" when searching for scripts to load or execute.

Script files contained within the load path can be loaded using the require or load kernel methods. The differences between these two mechanisms are discussed in more depth in RubySpec.

Load path is a lazier, more implicit form of pathing than Java's classpath, since libraries on the load path must still be explicitly loaded to become available.

Classpath

Java applications have their own path logic used for locating .class files, called the ''classpath''. The classpath is typically set up through the CLASSPATH environment variable or passed to the java command using -cp or -classpath with a delimited list of filesystem locations.

Classpath entries typically must contain one of two things:

  • The root from which a directory structure containing class files can be searched.
  • A JAR file containing that same structure.

Classpath is a more explicit form of pathing than load path, since everything in the classpath can be referenced from compiled code. No load step is needed, though the JVM will perform a load-on-demand as class dependencies require.

Classpath and Load Path Unification

Because the operation of Java's classpath and Ruby's load path are so similar, especially under JRuby, they are unified in JRuby 1.1. This results in a number of unified capabilities:

  • Everything in the Ruby load path is considered to be a classpath entry, so .class files under load path hierarchies are automatically available to be referenced from code.
  • Everything in the Java classpath is considered to be a load path entry, so .rb scripts, for example, contained in JAR files, are loadable.
  • Structures specific to the Java classpath (such as JAR files and remote URLs) can be specified as load path entries. This allows explicitly adding JAR files and remote servers locations to the JRuby load path, as though they were local paths.

Largely, this unification is intended to make it simpler to work with hybrid applications, where some code is in Ruby and some is in Java, and especially cases where Ruby code is being pre-compiled to Java bytecode and straddles the two worlds.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ClasspathAndLoadPath

headius edited this page Nov 17, 2014 · 6 revisions

Classpath and Load Path

Prior to JRuby 1.1, Java's Classpath (CLASSPATH) and Ruby's Load Path were largely separate. This document describes the unification of the two paths in JRuby 1.1.

Load Path

JRuby supports the concept of a "load path" as per Ruby 1.8. The load path contains filesystem directories to be used as the "root" when searching for scripts to load or execute.

Script files contained within the load path can be loaded using the require or load kernel methods. The differences between these two mechanisms are discussed in more depth in RubySpec.

Load path is a lazier, more implicit form of pathing than Java's classpath, since libraries on the load path must still be explicitly loaded to become available.

Classpath

Java applications have their own path logic used for locating .class files, called the ''classpath''. The classpath is typically set up through the CLASSPATH environment variable or passed to the java command using -cp or -classpath with a delimited list of filesystem locations.

Classpath entries typically must contain one of two things:

  • The root from which a directory structure containing class files can be searched.
  • A JAR file containing that same structure.

Classpath is a more explicit form of pathing than load path, since everything in the classpath can be referenced from compiled code. No load step is needed, though the JVM will perform a load-on-demand as class dependencies require.

Classpath and Load Path Unification

Because the operation of Java's classpath and Ruby's load path are so similar, especially under JRuby, they are unified in JRuby 1.1. This results in a number of unified capabilities:

  • Everything in the Ruby load path is considered to be a classpath entry, so .class files under load path hierarchies are automatically available to be referenced from code.
  • Everything in the Java classpath is considered to be a load path entry, so .rb scripts, for example, contained in JAR files, are loadable.
  • Structures specific to the Java classpath (such as JAR files and remote URLs) can be specified as load path entries. This allows explicitly adding JAR files and remote servers locations to the JRuby load path, as though they were local paths.

Largely, this unification is intended to make it simpler to work with hybrid applications, where some code is in Ruby and some is in Java, and especially cases where Ruby code is being pre-compiled to Java bytecode and straddles the two worlds.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

ClasspathAndLoadPath

headius edited this page Nov 17, 2014 · 6 revisions

Classpath and Load Path

Prior to JRuby 1.1, Java's Classpath (CLASSPATH) and Ruby's Load Path were largely separate. This document describes the unification of the two paths in JRuby 1.1.

Load Path

JRuby supports the concept of a "load path" as per Ruby 1.8. The load path contains filesystem directories to be used as the "root" when searching for scripts to load or execute.

Script files contained within the load path can be loaded using the require or load kernel methods. The differences between these two mechanisms are discussed in more depth in RubySpec.

Load path is a lazier, more implicit form of pathing than Java's classpath, since libraries on the load path must still be explicitly loaded to become available.

Classpath

Java applications have their own path logic used for locating .class files, called the ''classpath''. The classpath is typically set up through the CLASSPATH environment variable or passed to the java command using -cp or -classpath with a delimited list of filesystem locations.

Classpath entries typically must contain one of two things:

  • The root from which a directory structure containing class files can be searched.
  • A JAR file containing that same structure.

Classpath is a more explicit form of pathing than load path, since everything in the classpath can be referenced from compiled code. No load step is needed, though the JVM will perform a load-on-demand as class dependencies require.

Classpath and Load Path Unification

Because the operation of Java's classpath and Ruby's load path are so similar, especially under JRuby, they are unified in JRuby 1.1. This results in a number of unified capabilities:

  • Everything in the Ruby load path is considered to be a classpath entry, so .class files under load path hierarchies are automatically available to be referenced from code.
  • Everything in the Java classpath is considered to be a load path entry, so .rb scripts, for example, contained in JAR files, are loadable.
  • Structures specific to the Java classpath (such as JAR files and remote URLs) can be specified as load path entries. This allows explicitly adding JAR files and remote servers locations to the JRuby load path, as though they were local paths.

Largely, this unification is intended to make it simpler to work with hybrid applications, where some code is in Ruby and some is in Java, and especially cases where Ruby code is being pre-compiled to Java bytecode and straddles the two worlds.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ClasspathAndLoadPath

headius edited this page Nov 17, 2014 · 6 revisions

Classpath and Load Path

Prior to JRuby 1.1, Java's Classpath (CLASSPATH) and Ruby's Load Path were largely separate. This document describes the unification of the two paths in JRuby 1.1.

Load Path

JRuby supports the concept of a "load path" as per Ruby 1.8. The load path contains filesystem directories to be used as the "root" when searching for scripts to load or execute.

Script files contained within the load path can be loaded using the require or load kernel methods. The differences between these two mechanisms are discussed in more depth in RubySpec.

Load path is a lazier, more implicit form of pathing than Java's classpath, since libraries on the load path must still be explicitly loaded to become available.

Classpath

Java applications have their own path logic used for locating .class files, called the ''classpath''. The classpath is typically set up through the CLASSPATH environment variable or passed to the java command using -cp or -classpath with a delimited list of filesystem locations.

Classpath entries typically must contain one of two things:

  • The root from which a directory structure containing class files can be searched.
  • A JAR file containing that same structure.

Classpath is a more explicit form of pathing than load path, since everything in the classpath can be referenced from compiled code. No load step is needed, though the JVM will perform a load-on-demand as class dependencies require.

Classpath and Load Path Unification

Because the operation of Java's classpath and Ruby's load path are so similar, especially under JRuby, they are unified in JRuby 1.1. This results in a number of unified capabilities:

  • Everything in the Ruby load path is considered to be a classpath entry, so .class files under load path hierarchies are automatically available to be referenced from code.
  • Everything in the Java classpath is considered to be a load path entry, so .rb scripts, for example, contained in JAR files, are loadable.
  • Structures specific to the Java classpath (such as JAR files and remote URLs) can be specified as load path entries. This allows explicitly adding JAR files and remote servers locations to the JRuby load path, as though they were local paths.

Largely, this unification is intended to make it simpler to work with hybrid applications, where some code is in Ruby and some is in Java, and especially cases where Ruby code is being pre-compiled to Java bytecode and straddles the two worlds.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ClasspathAndLoadPath

headius edited this page Nov 17, 2014 · 6 revisions

Classpath and Load Path

Prior to JRuby 1.1, Java's Classpath (CLASSPATH) and Ruby's Load Path were largely separate. This document describes the unification of the two paths in JRuby 1.1.

Load Path

JRuby supports the concept of a "load path" as per Ruby 1.8. The load path contains filesystem directories to be used as the "root" when searching for scripts to load or execute.

Script files contained within the load path can be loaded using the require or load kernel methods. The differences between these two mechanisms are discussed in more depth in RubySpec.

Load path is a lazier, more implicit form of pathing than Java's classpath, since libraries on the load path must still be explicitly loaded to become available.

Classpath

Java applications have their own path logic used for locating .class files, called the ''classpath''. The classpath is typically set up through the CLASSPATH environment variable or passed to the java command using -cp or -classpath with a delimited list of filesystem locations.

Classpath entries typically must contain one of two things:

  • The root from which a directory structure containing class files can be searched.
  • A JAR file containing that same structure.

Classpath is a more explicit form of pathing than load path, since everything in the classpath can be referenced from compiled code. No load step is needed, though the JVM will perform a load-on-demand as class dependencies require.

Classpath and Load Path Unification

Because the operation of Java's classpath and Ruby's load path are so similar, especially under JRuby, they are unified in JRuby 1.1. This results in a number of unified capabilities:

  • Everything in the Ruby load path is considered to be a classpath entry, so .class files under load path hierarchies are automatically available to be referenced from code.
  • Everything in the Java classpath is considered to be a load path entry, so .rb scripts, for example, contained in JAR files, are loadable.
  • Structures specific to the Java classpath (such as JAR files and remote URLs) can be specified as load path entries. This allows explicitly adding JAR files and remote servers locations to the JRuby load path, as though they were local paths.

Largely, this unification is intended to make it simpler to work with hybrid applications, where some code is in Ruby and some is in Java, and especially cases where Ruby code is being pre-compiled to Java bytecode and straddles the two worlds.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

ClasspathAndLoadPath

headius edited this page Nov 17, 2014 · 6 revisions

Classpath and Load Path

Prior to JRuby 1.1, Java's Classpath (CLASSPATH) and Ruby's Load Path were largely separate. This document describes the unification of the two paths in JRuby 1.1.

Load Path

JRuby supports the concept of a "load path" as per Ruby 1.8. The load path contains filesystem directories to be used as the "root" when searching for scripts to load or execute.

Script files contained within the load path can be loaded using the require or load kernel methods. The differences between these two mechanisms are discussed in more depth in RubySpec.

Load path is a lazier, more implicit form of pathing than Java's classpath, since libraries on the load path must still be explicitly loaded to become available.

Classpath

Java applications have their own path logic used for locating .class files, called the ''classpath''. The classpath is typically set up through the CLASSPATH environment variable or passed to the java command using -cp or -classpath with a delimited list of filesystem locations.

Classpath entries typically must contain one of two things:

  • The root from which a directory structure containing class files can be searched.
  • A JAR file containing that same structure.

Classpath is a more explicit form of pathing than load path, since everything in the classpath can be referenced from compiled code. No load step is needed, though the JVM will perform a load-on-demand as class dependencies require.

Classpath and Load Path Unification

Because the operation of Java's classpath and Ruby's load path are so similar, especially under JRuby, they are unified in JRuby 1.1. This results in a number of unified capabilities:

  • Everything in the Ruby load path is considered to be a classpath entry, so .class files under load path hierarchies are automatically available to be referenced from code.
  • Everything in the Java classpath is considered to be a load path entry, so .rb scripts, for example, contained in JAR files, are loadable.
  • Structures specific to the Java classpath (such as JAR files and remote URLs) can be specified as load path entries. This allows explicitly adding JAR files and remote servers locations to the JRuby load path, as though they were local paths.

Largely, this unification is intended to make it simpler to work with hybrid applications, where some code is in Ruby and some is in Java, and especially cases where Ruby code is being pre-compiled to Java bytecode and straddles the two worlds.

Clone this wiki locally