问题
In my java application, I read a jar file (packaged with Maven shade plugin) into a bytestream. In the jar there is a entrypoint class defined in POM.xml
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.mycompany.TheEntryPoint</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
How do I load such class into my java app dynamically?
Update:
- The jar is loaded as byte stream and does not reside in the file system or URL
回答1:
The easiest way to do this is to use a URLClassLoader instead of trying to do this from scratch from a byte stream. You can always write the .jar out to a temporary file and create a URL to that.
The code would look something like:
URLClassLoader loader = new URLClassLoader(
new URL[] {new URL("file://...")},
Thread.currentThread().getContextClassLoader());
loader.loadClass("com.mycompany.TheEntryPoint");
You can also detect the main class name (or invoke it) automatically using JarURLConnection. (Oracle also has a tutorial on using this class.)
来源:https://stackoverflow.com/questions/13504120/load-jar-dynamically