標記之前,請閱讀整篇文章!如何在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)。只要許可證允許,你爲什麼不簡單地將其分成任何你想做的事情。 –