User Tools

Site Tools


java:dynamic-class-loader

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
java:dynamic-class-loader [2025/01/18 00:06] – created odeftajava:dynamic-class-loader [2025/01/18 00:08] (current) odefta
Line 1: Line 1:
-```java 
 ====== Dynamic Classpath Loading with Java Instrumentation ====== ====== Dynamic Classpath Loading with Java Instrumentation ======
  
Line 8: Line 7:
  
 ==== Basic Agent Class ==== ==== Basic Agent Class ====
-```java+<code java>
 package com.example; package com.example;
  
Line 35: Line 34:
     }     }
 } }
-```+</code>
  
 ==== MANIFEST.MF ==== ==== MANIFEST.MF ====
-```+<code>
 Manifest-Version: 1.0 Manifest-Version: 1.0
 Premain-Class: com.example.DynamicLoader Premain-Class: com.example.DynamicLoader
 Can-Redefine-Classes: true Can-Redefine-Classes: true
 Can-Retransform-Classes: true Can-Retransform-Classes: true
-```+</code>
  
 ===== Building ===== ===== Building =====
  
 ==== Without Maven ==== ==== Without Maven ====
-1. Compile the class: +<code bash>
-```bash+
 javac DynamicLoader.java javac DynamicLoader.java
-``` 
  
-2. Create the JAR with manifest: 
-```bash 
 mkdir META-INF mkdir META-INF
 # Create MANIFEST.MF with content above # Create MANIFEST.MF with content above
 jar cfm dynamic-loader.jar META-INF/MANIFEST.MF com/example/DynamicLoader.class jar cfm dynamic-loader.jar META-INF/MANIFEST.MF com/example/DynamicLoader.class
-```+</code>
  
 ==== With Maven ==== ==== With Maven ====
-```xml+<code xml>
 <project> <project>
     <modelVersion>4.0.0</modelVersion>     <modelVersion>4.0.0</modelVersion>
Line 95: Line 90:
     </build>     </build>
 </project> </project>
-```+</code>
  
 ===== Running ===== ===== Running =====
  
 ==== Basic Usage ==== ==== Basic Usage ====
-```bash+<code bash>
 java -javaagent:dynamic-loader.jar --add-opens java.base/java.lang=ALL-UNNAMED YourMainClass java -javaagent:dynamic-loader.jar --add-opens java.base/java.lang=ALL-UNNAMED YourMainClass
-```+</code>
  
 ==== Example Main Class ==== ==== Example Main Class ====
-```java+<code java>
 public class MainApp { public class MainApp {
     public static void main(String[] args) {     public static void main(String[] args) {
Line 113: Line 108:
     }     }
 } }
-```+</code>
  
 ===== Important Notes ===== ===== Important Notes =====
Line 134: Line 129:
  
 ===== Example Directory Structure ===== ===== Example Directory Structure =====
-```+<code>
 project/ project/
 +
 ├── src/ ├── src/
 │   └── main/ │   └── main/
Line 142: Line 138:
 │               └── example/ │               └── example/
 │                   └── DynamicLoader.java │                   └── DynamicLoader.java
 +
 ├── libs/ ├── libs/
 │   ├── mylib1.jar │   ├── mylib1.jar
 │   └── mylib2.jar │   └── mylib2.jar
 +
 ├── pom.xml ├── pom.xml
 └── README.md └── README.md
-```+</code>
  
 ===== References ===== ===== References =====
   * [[https://docs.oracle.com/en/java/javase/17/docs/api/java.instrument/java/lang/instrument/Instrumentation.html|Java Instrumentation API]]   * [[https://docs.oracle.com/en/java/javase/17/docs/api/java.instrument/java/lang/instrument/Instrumentation.html|Java Instrumentation API]]
   * [[https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/jar/JarFile.html|JarFile Documentation]]   * [[https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/jar/JarFile.html|JarFile Documentation]]
-``` 
java/dynamic-class-loader.1737151564.txt.gz · Last modified: 2025/01/18 00:06 by odefta