Details
-
Bug
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
1.4.0
-
None
-
Windows 7, JRE 1.8.0_144
Description
Found a hardcoded path to lib/bootstrap in org.apache.nifi.NiFi class when calling createBootstrapClassLoader() :
private static ClassLoader createBootstrapClassLoader() throws IOException { //Get list of files in bootstrap folder final List<URL> urls = new ArrayList<>(); Files.list(Paths.get({color:red}_"lib/bootstrap"_{color})).forEach(p -> { try { urls.add(p.toUri().toURL()); } catch (final MalformedURLException mef) { LOGGER.warn("Unable to load " + p.getFileName() + " due to " + mef, mef); } }); //Create the bootstrap classloader return new URLClassLoader(urls.toArray(new URL[0]), Thread.currentThread().getContextClassLoader()); }
There are multiple places where the .\lib directory is defined:
- BOOTSTRAP_LIBS or %LIB_DIR% environment variables in nifi.sh or run-nifi.bat
- lib.dir in bootstrap.conf is most likely it
- nifi.nar.library.directory or nifi.web.war.directory identify the library folder but don't quite refer to the bootstrap
Perhaps using lib.dir in bootstrap.conf or create a new lib.bootstrap.dir property.
Using different library folders would allow configuring multiple instances of Nifi using the same resource. I managed changing the properties and environment variables above to point to a common lib directory but this harcoded prevented run-nifi.bat to run successfully. dump-nifi.bat and status-nifi.bat ran without issue.