Tomcat应用程序在WEB-INF/lib中抛出java.lang.ClassNotFoundException异常。

huangapple 未分类评论46阅读模式
英文:

Tomcat Application throws java.lang.ClassNotFoundException for Jar in WEB-INF/lib

问题

我正在尝试将Boilerpipe添加到我的Tomcat项目中进行网页抓取,但在这样做时,我经常遇到问题。我将jar包以及必要的资源(nekohtml-1.9.13.jar和xerces-2.9.1.jar)添加到了Web-INF/lib文件夹中,并将其作为外部库添加到了项目结构中。

然而,每次我尝试部署应用程序时,都会在从Tomcat构建时出现java.io.ClassNotFoundException错误,我不知道为什么会出现这个问题。具体来说,Tomcat告诉我访问被拒绝,但我不知道这可能意味着什么,因为它可以轻松地访问同一文件夹中的其他Jars。

这是Tomcat错误的完整堆栈跟踪信息:

Error:Internal error: (java.io.FileNotFoundException) C:\Users\micro\IdeaProjects\Spectral_Phasor_Experimentation\out\artifacts\Spectral_Phasor_Experimentation_war_exploded\WEB-INF\lib\boilerpipe-1.2.0.jar (Access is denied)
java.io.FileNotFoundException: C:\Users\micro\IdeaProjects\Spectral_Phasor_Experimentation\out\artifacts\Spectral_Phasor_Experimentation_war_exploded\WEB-INF\lib\boilerpipe-1.2.0.jar (Access is denied)
	at java.base/java.io.FileOutputStream.open0(Native Method)
	at java.base/java.io.FileOutputStream.open(FileOutputStream.java:292)
	at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235)
	at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:185)
	at com.intellij.openapi.util.io.FileUtil.openOutputStream(FileUtil.java:436)
	at com.intellij.openapi.util.io.FileUtil.performCopy(FileUtil.java:405)
	at com.intellij.openapi.util.io.FileUtil.copyContent(FileUtil.java:399)
	at org.jetbrains.jps.incremental.FSOperations.copy(FSOperations.java:413)
	at org.jetbrains.jps.incremental.artifacts.instructions.FilterCopyHandler.copyFile(FilterCopyHandler.java:40)
	at org.jetbrains.jps.incremental.artifacts.instructions.FileBasedArtifactRootDescriptor.copyFromRoot(FileBasedArtifactRootDescriptor.java:87)
	at org.jetbrains.jps.incremental.artifacts.IncArtifactBuilder.build(IncArtifactBuilder.java:160)
	at org.jetbrains.jps.incremental.artifacts.IncArtifactBuilder.build(IncArtifactBuilder.java:50)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildTarget(IncProjectBuilder.java:1034)
	at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1015)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1071)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:965)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:794)
	at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:376)
	at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:178)
	at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:139)
	at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:288)
	at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:121)
	at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:228)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:830)
Please perform full project rebuild (Build | Rebuild Project)

我还在某处读到过在WEB-INF/lib文件夹中复制Tomcat现有库的内容是不好的,但我不确定我是否这样做了。这是我lib文件夹中的内容:
(大部分内容是由IntelliJ自动导入的)

javax.annotation.jar
javax.ejb.jar
javax.jms.jar
javax.persistence.jar
javax.resource.jar
javax.servlet.jar
javax.servlet.jsp.jar
javax.servlet.jsp.jstl.jar
javax.transaction.jar
joda-time-2.10.5.jar
jstl-1.2.jar
mysql-connector-java-5.1.48-bin.jar
taglibs-standard-jstlel-1.2.5.jar

非常感谢您提供帮助。

英文:

I'm trying to add Boilerpipe to do web scraping with my Tomcat project, but when I do so I tend to run into a problem. I add the jar as well as the necessary resources (nekohtml-1.9.13.jar and xerces-2.9.1.jar) to my Web-INF/lib folder and as an external library in the project structure.

However, every time I try to deploy the application, I get a java.io.ClassNotFoundException while building from Tomcat and I have no idea why. Specifically, Tomcat tells me that access is denied, but I have no idea what that could mean since it is easily accessing other Jars in the same folder.

Here is the full stacktrace of the Tomcat error

Error:Internal error: (java.io.FileNotFoundException) C:\Users\micro\IdeaProjects\Spectral_Phasor_Experimentation\out\artifacts\Spectral_Phasor_Experimentation_war_exploded\WEB-INF\lib\boilerpipe-1.2.0.jar (Access is denied)
java.io.FileNotFoundException: C:\Users\micro\IdeaProjects\Spectral_Phasor_Experimentation\out\artifacts\Spectral_Phasor_Experimentation_war_exploded\WEB-INF\lib\boilerpipe-1.2.0.jar (Access is denied)
	at java.base/java.io.FileOutputStream.open0(Native Method)
	at java.base/java.io.FileOutputStream.open(FileOutputStream.java:292)
	at java.base/java.io.FileOutputStream.&lt;init&gt;(FileOutputStream.java:235)
	at java.base/java.io.FileOutputStream.&lt;init&gt;(FileOutputStream.java:185)
	at com.intellij.openapi.util.io.FileUtil.openOutputStream(FileUtil.java:436)
	at com.intellij.openapi.util.io.FileUtil.performCopy(FileUtil.java:405)
	at com.intellij.openapi.util.io.FileUtil.copyContent(FileUtil.java:399)
	at org.jetbrains.jps.incremental.FSOperations.copy(FSOperations.java:413)
	at org.jetbrains.jps.incremental.artifacts.instructions.FilterCopyHandler.copyFile(FilterCopyHandler.java:40)
	at org.jetbrains.jps.incremental.artifacts.instructions.FileBasedArtifactRootDescriptor.copyFromRoot(FileBasedArtifactRootDescriptor.java:87)
	at org.jetbrains.jps.incremental.artifacts.IncArtifactBuilder.build(IncArtifactBuilder.java:160)
	at org.jetbrains.jps.incremental.artifacts.IncArtifactBuilder.build(IncArtifactBuilder.java:50)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildTarget(IncProjectBuilder.java:1034)
	at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1015)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1071)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:965)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:794)
	at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:376)
	at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:178)
	at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:139)
	at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:288)
	at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:121)
	at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:228)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:830)
Please perform full project rebuild (Build | Rebuild Project)

I also read somwhere that duplicating Tomcat's existing libaries in the WEB-INF/lib folder is bad, but I am not sure if I did that. Here is what I have in my lib folder:
(most of it was auto-imported by IntelliJ)

javax.annotation.jar
javax.ejb.jar
javax.jms.jar
javax.persistence.jar
javax.resource.jar
javax.servlet.jar
javax.servlet.jsp.jar
javax.servlet.jsp.jstl.jar
javax.transaction.jar
joda-time-2.10.5.jar
jstl-1.2.jar
mysql-connector-java-5.1.48-bin.jar
taglibs-standard-jstlel-1.2.5.jar

Any help would be greatly appreciated.

Thanks.

huangapple
  • 本文由 发表于 2020年4月9日 14:57:12
  • 转载请务必保留本文链接:https://java.coder-hub.com/61115544.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定