Reading Resources from JAR Files
One interesting challenge I encountered is the need or ability to make an Java application extensible by providing additional classes and configuation. Ideally extension should happen by dropping a properly crafted JAR file into a specified location and restard the server. Along the line I learned about Java's classpath. This is what is to be shared here.
Act one: onto the classpath
When you start off with Java, you would expect, that you simply can set the classpath varible either using an environment variable or the java -cp
parameter. Then you learn the hard way, that java -jar
and java -cp
are mutually exclusive. After a short flirt with fatJAR, you end up with a directory structure like this:
The secreingredient to make this work is the manifest file inside the myApp.jar
. It needs to be told to put all jar files in libs
onto the classpath too. In maven, it looks like this:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven.jar.plugin.version}</version>
<configuration>
<archive>
<manifest>
<mainClass>com.hcl.domino.keep.Launch</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
<Class-Path>libs/*</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
Now, that all JARS are successfully availble on the classspath, we can try to retrieve them.
Read more
Posted by Stephan H Wissel on 29 April 2021 | Comments (0) | categories: Java Maven