diff --git a/container/features/src/main/resources/features-core.xml b/container/features/src/main/resources/features-core.xml
index 124c5dbb55b3..f4ac1130ffc6 100644
--- a/container/features/src/main/resources/features-core.xml
+++ b/container/features/src/main/resources/features-core.xml
@@ -351,7 +351,7 @@ org.jolokia.authMode=jaas
commons-codec
guava
scv-api
- mvn:org.opennms.core/org.opennms.core.lib/${project.version}
+ mvn:org.opennms.core/org.opennms.core.fileutils/${project.version}
mvn:org.opennms.features.scv/org.opennms.features.scv.jceks-impl/${project.version}
diff --git a/container/features/src/main/resources/features-sentinel.xml b/container/features/src/main/resources/features-sentinel.xml
index 02d808e857c0..4334f76bcce3 100644
--- a/container/features/src/main/resources/features-sentinel.xml
+++ b/container/features/src/main/resources/features-sentinel.xml
@@ -142,6 +142,7 @@
mvn:org.opennms.features.flows.classification.engine/org.opennms.features.flows.classification.engine.api/${project.version}
mvn:org.opennms.features.flows.classification.engine/org.opennms.features.flows.classification.engine.impl/${project.version}
mvn:org.opennms.features.flows/org.opennms.features.flows.elastic/${project.version}
+ mvn:org.opennms.core/org.opennms.core.fileutils/${project.version}
mvn:org.opennms.features.flows/org.opennms.features.flows.processing/${project.version}
wrap:mvn:org.freemarker/freemarker/${freemarkerVersion}$Bundle-SymbolicName=org.freemarker&Bundle-Version=${freemarkerVersion}
mvn:org.opennms.core/org.opennms.core.cache/${project.version}
diff --git a/container/features/src/main/resources/features.xml b/container/features/src/main/resources/features.xml
index e7c663c0d539..d01d70cc0730 100644
--- a/container/features/src/main/resources/features.xml
+++ b/container/features/src/main/resources/features.xml
@@ -1017,6 +1017,7 @@
mvn:org.opennms.features.telemetry/org.opennms.features.telemetry.api/${project.version}
mvn:org.opennms.features.telemetry/org.opennms.features.telemetry.common/${project.version}
mvn:org.opennms.features.telemetry/org.opennms.features.telemetry.listeners/${project.version}
+ mvn:org.opennms.core/org.opennms.core.fileutils/${project.version}
mvn:org.opennms.features.telemetry.protocols/org.opennms.features.telemetry.protocols.adapters/${project.version}
mvn:org.opennms.features.telemetry/org.opennms.features.telemetry.shell/${project.version}
@@ -1157,6 +1158,7 @@
mvn:org.freemarker/freemarker/${freemarkerVersion}
mvn:org.opennms.features.flows.classification.engine/org.opennms.features.flows.classification.engine.impl/${project.version}
mvn:org.opennms.features.flows/org.opennms.features.flows.elastic/${project.version}
+ mvn:org.opennms.core/org.opennms.core.fileutils/${project.version}
mvn:org.opennms.features.flows/org.opennms.features.flows.processing/${project.version}
mvn:org.opennms.features.flows/org.opennms.features.flows.kafka-persistence/${project.version}
mvn:org.opennms.core/org.opennms.core.cache/${project.version}
diff --git a/core/fileutils/pom.xml b/core/fileutils/pom.xml
new file mode 100644
index 000000000000..b0c926b32b91
--- /dev/null
+++ b/core/fileutils/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+ org.opennms
+ org.opennms.core
+ 34.0.0-SNAPSHOT
+
+
+ org.opennms.core
+ org.opennms.core.fileutils
+ bundle
+ OpenNMS :: Core :: File Utils
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ JavaSE-1.8
+ ${project.artifactId}
+ ${project.version}
+
+
+
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+ junit
+ junit
+ test
+
+
+ org.awaitility
+ awaitility
+ test
+
+
+
+
\ No newline at end of file
diff --git a/core/lib/src/main/java/org/opennms/core/fileutils/FileUpdateCallback.java b/core/fileutils/src/main/java/org/opennms/core/fileutils/FileUpdateCallback.java
similarity index 100%
rename from core/lib/src/main/java/org/opennms/core/fileutils/FileUpdateCallback.java
rename to core/fileutils/src/main/java/org/opennms/core/fileutils/FileUpdateCallback.java
diff --git a/core/lib/src/main/java/org/opennms/core/fileutils/FileUpdateWatcher.java b/core/fileutils/src/main/java/org/opennms/core/fileutils/FileUpdateWatcher.java
similarity index 100%
rename from core/lib/src/main/java/org/opennms/core/fileutils/FileUpdateWatcher.java
rename to core/fileutils/src/main/java/org/opennms/core/fileutils/FileUpdateWatcher.java
diff --git a/core/lib/src/test/java/org/opennms/core/fileutils/FileUpdateWatcherTest.java b/core/fileutils/src/test/java/org/opennms/core/fileutils/FileUpdateWatcherTest.java
similarity index 94%
rename from core/lib/src/test/java/org/opennms/core/fileutils/FileUpdateWatcherTest.java
rename to core/fileutils/src/test/java/org/opennms/core/fileutils/FileUpdateWatcherTest.java
index 2fad1267e252..c7b6a48646e7 100644
--- a/core/lib/src/test/java/org/opennms/core/fileutils/FileUpdateWatcherTest.java
+++ b/core/fileutils/src/test/java/org/opennms/core/fileutils/FileUpdateWatcherTest.java
@@ -21,7 +21,6 @@
*/
package org.opennms.core.fileutils;
-import static org.awaitility.Awaitility.await;
import static java.util.concurrent.TimeUnit.SECONDS;
import java.io.BufferedWriter;
@@ -30,6 +29,7 @@
import java.io.IOException;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.awaitility.Awaitility;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
@@ -75,7 +75,7 @@ public void testFileUpdateWatcher() throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(testFile));
writer.write(hello);
writer.close();
- await().atMost(5, SECONDS).pollDelay(0, SECONDS).pollInterval(2, SECONDS)
+ Awaitility.await().atMost(5, SECONDS).pollDelay(0, SECONDS).pollInterval(2, SECONDS)
.untilTrue(reloadCalled);
fileWatcher.destroy();
}
diff --git a/core/pom.xml b/core/pom.xml
index e634ab1bb7b1..07a7cc4636e4 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -61,5 +61,6 @@
tracing
grpc
encrypt-util
+ fileutils
diff --git a/features/flows/processing/pom.xml b/features/flows/processing/pom.xml
index ff01058e3760..a7694ed329b0 100644
--- a/features/flows/processing/pom.xml
+++ b/features/flows/processing/pom.xml
@@ -57,6 +57,11 @@
org.opennms.core.cache
${project.version}
+
+ org.opennms.core
+ org.opennms.core.fileutils
+ ${project.version}
+
org.opennms.features.flows.classification.engine
org.opennms.features.flows.classification.engine.api
diff --git a/features/scv/jceks-impl/pom.xml b/features/scv/jceks-impl/pom.xml
index 04fc1e6b1e71..f3c028460d7c 100644
--- a/features/scv/jceks-impl/pom.xml
+++ b/features/scv/jceks-impl/pom.xml
@@ -40,7 +40,7 @@
org.opennms.core
- org.opennms.core.lib
+ org.opennms.core.fileutils
${project.version}
diff --git a/features/telemetry/protocols/adapters/pom.xml b/features/telemetry/protocols/adapters/pom.xml
index 2aacc6777c44..5e7cc8dbca46 100644
--- a/features/telemetry/protocols/adapters/pom.xml
+++ b/features/telemetry/protocols/adapters/pom.xml
@@ -68,6 +68,11 @@
org.opennms.core.sysprops
${project.version}
+
+ org.opennms.core
+ org.opennms.core.fileutils
+ ${project.version}
+
org.opennms.features.collection
org.opennms.features.collection.thresholding.impl
diff --git a/opennms-base-assembly/pom.xml b/opennms-base-assembly/pom.xml
index 2cb71cbfa161..8353400aea1e 100644
--- a/opennms-base-assembly/pom.xml
+++ b/opennms-base-assembly/pom.xml
@@ -859,6 +859,11 @@
org.opennms.features.topology.persistence.impl
${project.version}
+
+ org.opennms.core
+ org.opennms.core.fileutils
+ ${project.version}
+
org.opennms.core.ipc.rpc
org.opennms.core.ipc.rpc.jms-impl