标记之前,请阅读整篇文章!如何在Tomcat webapp中加载作为Maven依赖关系添加的jar中的所有文件?
我要读的jar
这是一个Maven的依赖性profiles
文件夹下的所有文件:
下面是我使用的读取文件的代码:
CodeSource cs = Detector.class.getProtectionDomain().getCodeSource();
public List<String> pr = new ArrayList<>();
if (cs != null) {
URL jar = cs.getLocation();
ZipInputStream zip = null;
try {
zip = new ZipInputStream(jar.openStream());
while (true) {
ZipEntry entry = zip.getNextEntry();
if (entry == null)
break;
String ename = entry.getName();
if (ename.startsWith("profiles/")) {
try(InputStream in =
Detector.class.getClassLoader().getResourceAsStream(ename)) {
pr.add(IOUtils.toString(in));
}
}
}
DetectorFactory.loadProfile(pr);
}
}
当我在独立的Java项目中使用此代码时,它工作正常并且正在读取文件,但是当我在Tomcat webapp中使用相同的代码时,它不会。然而根据我的观察,这似乎是Tomcat的ClassLoader
问题,因为在Java应用程序中,类加载器是LauncherAppClassLoader
,而在webapp中它是ParallelWebAppClassLoader
。
这个'langdetect -.... jar'是在你的控制下还是在你认识的人的控制之下? –
我已经添加它作为Maven的依赖 – amit28
我知道。你之前这么说。但是您也可以将您自己的(公司的)工件添加为Maven依赖项。他们不一定非得从外部来。但我认为[这是你的情况](http://search.maven.org/#search%7Cga%7C1%7Clangdetect),对不对?顺便说一句,在Maven Central有一个更新的版本('1.1.2-20151117'),扩展了'groupId'。这是[GitHub上的一个项目](https://github.com/shuyo/language-detection)。只要许可证允许,你为什么不简单地将其分成任何你想做的事情。 –