Загрузите банку динамически
В моем java-приложении я прочитал jar-файл (упакованный с плагином Maven Shade) в поток байтов. В банке есть класс точки входа, определенный в 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>
Как мне динамически загрузить такой класс в Java-приложение?
Обновить:
- JAR загружается как поток байтов и не находится в файловой системе или URL
1 ответ
Решение
Самый простой способ сделать это - использовать URLClassLoader
вместо того, чтобы пытаться сделать это с нуля из потока байтов. Вы всегда можете записать.jar во временный файл и создать URL для этого.
Код будет выглядеть примерно так:
URLClassLoader loader = new URLClassLoader(
new URL[] {new URL("file://...")},
Thread.currentThread().getContextClassLoader());
loader.loadClass("com.mycompany.TheEntryPoint");
Вы также можете автоматически определить имя основного класса (или вызвать его), используя JarURLConnection
, (Oracle также имеет руководство по использованию этого класса.)