- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我们的应用程序中,我们使用 ini 文件来配置 OSGi 应用程序。现在我考虑添加一个 WatchService 来检测更改并在必要时重新加载修改后的文件。
到目前为止我找到了多个教程。其中大多数都是相似的,结果如下: http://java.dzone.com/news/how-watch-file-system-changes 。我是这样采用的:
36: public Ini(final File file) throws IOException {
if (!file.exists()) {
throw new IOException("Ini-File does not exist.");
} else if (!file.canRead()) {
40: throw new IOException("Ini-File is not readable.");
}
iniFile = file;
FileSystem fileSystem = FileSystems.getFileSystem(file.toURI());
45: Path test = fileSystem.getPath(file.getAbsolutePath());
Path ini = FileSystems.getDefault().getPath(file.getParent(), file.getName());
Logger.debug(ini.toString());
readIni(ini);
50: service = FileSystems.getDefault().newWatchService();
file.getParentFile().toPath().register(service, ENTRY_MODIFY);
Thread watcher = new Thread(() -> {
// noinspection InfiniteLoopStatement
55: while (true) {
WatchKey key = null;
try {
key = service.take();
for (WatchEvent<?> event : key.pollEvents()) {
60: Logger.debug("event received");
if (event.kind() != ENTRY_MODIFY) {
continue;
}
WatchEvent<Path> ev = (WatchEvent<Path>) event;
65:
File filename = ev.context().toFile();
if (filename.getAbsolutePath().equals(iniFile.getAbsolutePath())) {
Logger.debug(filename.getName() + " has changed");
70: config = new HashMap<>();
try {
readIni(filename.toPath());
} catch(IOException e) {
Logger.warning(e);
75: }
}
}
} catch (Exception e) {
Logger.warning(e);
80: }
if (key != null)
key.reset();
}
});
85:
watcher.start();
}
创建新实例时,我首先检查文件是否存在。之后,我想创建一个 WatchService 来分析这个配置文件(一开始只有这个。稍后我将针对所有加载的文件更改为 1 个 WatchService)。
有几行(44 - 46)以不同的方式执行相同的操作。它们都不起作用。
现在,当我创建这样的 Ini 文件时,felix 会告诉我以下内容:
[ERROR] : java.lang.NoClassDefFoundError: Could not initialize class java.nio.file.FileSystems$DefaultFileSystemHolder
java.lang.IllegalStateException: java.lang.NoClassDefFoundError: Could not initialize class java.nio.file.FileSystems$DefaultFileSystemHolder
at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__M_stateChanged(LifecycleCallbackHandler.java:171)
at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
at org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:560)
at org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:440)
at org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:179)
at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:319)
at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:240)
at org.apache.felix.ipojo.extender.internal.linker.ManagedType$InstanceSupport$1.call(ManagedType.java:312)
at org.apache.felix.ipojo.extender.internal.linker.ManagedType$InstanceSupport$1.call(ManagedType.java:306)
at org.apache.felix.ipojo.extender.internal.queue.JobInfoCallable.call(JobInfoCallable.java:114)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class java.nio.file.FileSystems$DefaultFileSystemHolder
at java.nio.file.FileSystems.getDefault(FileSystems.java:176)
at java.nio.file.spi.FileSystemProvider.installedProviders(FileSystemProvider.java:156)
at java.nio.file.FileSystems.getFileSystem(FileSystems.java:219)
at df.core.config.internal.Ini.<init>(Ini.java:44)
at df.core.config.internal.ConfigImpl.__M_addConfig(ConfigImpl.java:180)
at df.core.config.internal.ConfigImpl.addConfig(ConfigImpl.java)
at df.core.config.api.Config$$Proxy.addConfig(Unknown Source)
at df.playground.IniTest.__M_validate(IniTest.java:24)
at df.playground.IniTest.validate(IniTest.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.felix.ipojo.util.Callback.call(Callback.java:237)
at org.apache.felix.ipojo.util.Callback.call(Callback.java:193)
at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.call(LifecycleCallback.java:86)
at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__M_stateChanged(LifecycleCallbackHandler.java:162)
... 13 more
这表明我在第 44 行搜索文件的文件系统对象。我是否做错了什么,因为我的代码找不到 DefaultFileSystemHolder?它是一个 java 内部类,所以我不需要在 MANIFEST.MF 中使用 import 语句,对吗?
它使用 Apache Felix 4.4.1 和 Oracle Java 8 在 Ubuntu 14.04 上运行,并使用 Maven 进行构建。
提前致谢
最佳答案
向 Felix 添加以下配置:
org.osgi.framework.bootdelegation=sun.nio.*
Oracle JDK 中的FileSystems
实现使用内部类sun.nio.fs.DefaultFileSystemProvider
。这是 JDK 实现的一个好奇之处,因为它期望一些内部类(例如这个类)从任何类加载器中可见。在 OSGi 中,唯一对所有包始终可见的类是以 java.
开头,例如 java.lang.String
等。
bootdelegation 配置允许我们扩展始终可见的包集。它正是针对这种情况,即 JVM 内部类。有时,它对于运行已检测的代码也很有用,例如用于覆盖范围或分析。它不是用于从 JDK 公开其他 API 的通用设置。
关于java - OSGi noClassDefFound for java.nio.files.FileSystems$DefaultFileSystemHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25178582/
有没有办法确定我是否可以使用标准 (在所有支持 C++17 的现代 C++ 编译器上可用)或 由较旧的编译器使用。 (例如 g++ 6.3,这是 Debian Stretch 上的当前标准版本) 知
因此,boost::filesystem 允许您在文件所有者拥有的权限、组拥有的权限以及所有用户拥有的权限的意义上访问文件的权限。这很好,但我不想开始检查我是谁,我的组是什么等等——我只想检查我是否可
我不小心使用 rm -rf 删除了错误的文件夹,我尝试过的每个工具都告诉我我没有硬盘或找不到文件系统。 当我输入 df 时,我得到: 已使用的文件系统大小 Avail Use% Mounted on
我是 Java 的新手,正在尝试学习 IO 的概念。我遇到过两个非常相似的 Java 类,FileSystem 和 FileSystems。它们之间有什么区别?什么时候使用一个而不是另一个? 最佳答案
我查了很多关于c++17下文件系统链接的问题,还是无法链接成功。我的main.cpp文件如下。 #include int main(int argc, char** argv) { std:
Boost 库有一个类来处理文件路径:boost::filesystem::path。Boos 也有这个类 boost::filesystem::wpath 每个类都有方法string(), wstr
我正在编写一个利用 std::filesystem 的库(仅供学习)。它在 MSVC 上运行良好,但是默认情况下,Linux 的 LTS 版本就像 Ubuntu 一样附带 GCC 6.x,官方存储库中
请查找随附的代码片段。我正在使用此代码将文件从 hdfs 下载到我的本地文件系统 - Configuration conf = new Configuration(); FileSys
这段代码中std::filesystem::copy()和std::filesystem::copy_file()有什么区别? #include void testing() { const
以下代码旨在去除路径的第一部分,以防它存在: #include std::filesystem::path strip_prefix(std::filesystem::path p) {
在以下两种情况下,是否有理由调用lexically_normal: std::filesystem::path filepath = someFuntionThatGetsAPath(); filep
函数 boost::filesystem::canonical() ( doc of 1.66 , doc of current release ) 提供两个参数(忽略错误代码重载)base。第一个是
boost::filesystem::path使用 &转义路径字符串中的引号,see demo : std::cout 标题。 最佳答案 Boost::Filesystem 相当古老,早于 C++14
考虑以下关于路径分解的断言,其中每个局部变量,例如stem 具有明显的初始化,例如auto stem = path.stem() — assert(root_path == root_name / r
给定以下代码: fs::path p{ "a/b/" }; fs::path q{ "a/b/." }; assert(p == q); [注意定义 q 的字符串末尾的额
由于 C++17 std::filesystem 与 boost::filesystem 非常相似,所以我尝试做与这个问题相同的事情: Escaping some Directories in ite
我找到了这个页面,描述了 c++14 和 c++17 之间的变化: https://isocpp.org/files/papers/p0636r0.html ... 它链接到此页面,该页面描述了建议的
我有一些代码,当我编译它时,出现以下错误,我不知道如何解决。我尝试添加 -L/usr/lib/x86_64-linux-gnu、-lboost_system 和 -lboost_filesystem,
尝试使用 Asset.loadAsync 将 .txt Assets 作为字符串加载到 Expo 中 Asset.loadAsync(module) 解析并提供一个 localUri 但是,FileS
我在 中编码C++ 在 Visual Studio (Windows 10)并收到此错误: #error The header providing std::experimental::filesy
我是一名优秀的程序员,十分优秀!