【问题标题】:JSP - Only a type can be imported. Name.pacakge.class resolves to a package but the class is thereJSP - 只能导入一个类型。 Name.pacakge.class 解析为一个包,但该类在那里
【发布时间】:2017-04-05 12:30:43
【问题描述】:

我在尝试通过 tomcat 7 部署 web 应用时收到此错误。

jsp文件名analysis.jsp这是错误:

Apr 05, 2017 3:05:39 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet [analyserServlet] in web application [/MWE] threw load() exception
org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: [26] in the generated java file: [/usr/share/tomcat/work/Catalina/localhost/MWE/org/apache/jsp/analysis_jsp.java]
Only a type can be imported. mila.HMM.MorphMult2TaggerFormat resolves to a package

An error occurred at line: [27] in the generated java file: [/usr/share/tomcat/work/Catalina/localhost/MWE/org/apache/jsp/analysis_jsp.java]
Only a type can be imported. mila.HMM.HMM2Morph resolves to a package

An error occurred at line: [28] in the generated java file: [/usr/share/tomcat/work/Catalina/localhost/MWE/org/apache/jsp/analysis_jsp.java]
Only a type can be imported. mila.mw.PostProcessor1 resolves to a package

An error occurred at line: [29] in the generated java file: [/usr/share/tomcat/work/Catalina/localhost/MWE/org/apache/jsp/analysis_jsp.java]
Only a type can be imported. mila.mw.MWXMLTokenizer resolves to a package

An error occurred at line: 36 in the jsp file: /analysis.jsp
mila.mw.MWXMLTokenizer cannot be resolved to a type
33: String tokenizeAndAnalyze(String rawText) throws Exception {
34:     StringWriter sw = new StringWriter();
35:     try (InputStream ins = new ByteArrayInputStream(rawText.getBytes("UTF-8"))) {
36:         new mila.mw.MWXMLTokenizer().tokenizeAndAnalyze(ins, new PrintWriter(sw));
37:     }
38:     StringWriter ppSW = new StringWriter();
39:     try (InputStream ins = new ByteArrayInputStream(sw.toString().getBytes("UTF-8"))) {


An error occurred at line: 40 in the jsp file: /analysis.jsp
mila.mw.PostProcessor1 cannot be resolved to a type
37:     }
38:     StringWriter ppSW = new StringWriter();
39:     try (InputStream ins = new ByteArrayInputStream(sw.toString().getBytes("UTF-8"))) {
40:         new mila.mw.PostProcessor1().process(ins,  new PrintWriter(ppSW));
41:     }
42:     return ppSW.toString();
43: }


An error occurred at line: 46 in the jsp file: /analysis.jsp
mila.HMM.MorphMult2TaggerFormat cannot be resolved to a type
43: }
44: 
45: String runTagger(String xmlAnalyzed, String _tempDirectoryPath) throws Exception {
46:     final String taggerFormat = new mila.HMM.MorphMult2TaggerFormat()
47:                             .myWEBMorp2Tagger(xmlAnalyzed, _tempDirectoryPath);
48:     final String roydir = "/data/tagger/royTagger/";
49:     final String probabilityDir = "/data/tagger/taggerLearningOutputFile/";


An error occurred at line: 60 in the jsp file: /analysis.jsp
mila.HMM.HMM2Morph cannot be resolved to a type
57:     
58:     final String xmlTaggedFilename = _tempDirectoryPath + "/tagged.xml";
59:     PrintWriter pw = new PrintWriter(xmlTaggedFilename);
60:     new mila.HMM.HMM2Morph().process(xmlAnalyzed, taggedFilename, pw);
61:     return xmlTaggedFilename;    
62: }
63: 


Stacktrace:
    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:494)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:379)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:662)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:364)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:138)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1282)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1195)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1085)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5318)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5610)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1260)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:2002)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

这是来自jsp的导入部分:

<%@ page language = "java"
    import = "java.lang.StringBuilder"
    import = "java.io.StringWriter"
    import = "java.io.PrintWriter"
    import = "java.io.ByteArrayInputStream"
    import = "java.io.IOException"
    import = "java.io.File"
    import = "java.io.BufferedReader"
    import = "java.io.InputStreamReader"
    import = "java.io.InputStream"
    import = "java.nio.file.Files"
    import = "java.nio.file.Paths"
    import = "java.nio.file.StandardCopyOption"
    import = "mila.HMM.MorphMult2TaggerFormat"
    import = "mila.HMM.HMM2Morph"
    import = "mila.mw.PostProcessor1"
    import = "mila.mw.MWXMLTokenizer"
%>

WEB-INF/lib 文件夹下,我有一个名为morphAnalyzer.jar 的JAR,它基本上是项目,它包含所有需要的类,包括导致此错误的类。 这是对 JAR 的部分 vim 查看

mila/
mila/HMM/
mila/HMM/HMM2Morph.class
mila/HMM/MorphMult2TaggerFormat.class
...
mila/mw/MWXMLMorphAnalyzer.class
mila/mw/MWXMLTokenizer.class
mila/mw/PostProcessor1.class
...

正如您所见,jar 确实包含了我需要的所有类,但由于某种原因,jsp 文件无法将它们识别为类。

P.S 没有其他包具有相同的类名(即所有类名在整个项目中都是唯一的)

我做错了什么?请帮忙。

【问题讨论】:

标签: java jsp tomcat web-deployment


【解决方案1】:

在您的应用程序的类路径中包含morphAnalyzer.jar

【讨论】:

  • 抱歉这个菜鸟问题,但我该怎么做呢?这个 JAR 基本上是我的整个应用程序。
  • 如果您正在构建桌面应用程序。比你的项目应该压缩到jar。对于 web 应用程序,它应该被压缩为 .war。在 WEB-INF/lib 文件夹下的这场战争中,您的应用程序引用的其他库应该驻留。我 eclipse 你可以配置这些 jar 文件的路径,这样它们将在生成 war 文件时被捆绑并在编译时被识别
  • 我正在使用远程 Linux 工作站(我的 PC 是 windows),该应用程序是针对互联网的。我所做的是创建一个 jar 文件 (morphAnalayzer.jar) 使用 eclipse 导出它(将引用的库与它捆绑在一起)并将其放在 WEB-INF\lib 文件夹中(通过 SSH 到工作站),然后简单地尝试部署从tomcat管理器(在我的PC上)通过将其定向到文件夹。我可以从整个东西生成一个.war文件,然后用家里的tomcat管理器上传,会不会有同样的效果?
  • 使用 SSH 上传 jar 文件后。不要部署在 tomcat manager 中。只需重新启动服务器。如果您在不创建战争的情况下进行部署。您将丢失通过使用 SSH 上传所做的更改
  • 您好,很抱歉回复晚了,这里有 2 周的假期。我不明白你的意思 - 该服务目前尚未完全部署。我应该重新部署它吗?在我的 Windows 工作站上创建它的 WAR 文件并部署所述文件?
【解决方案2】:

类在导入属性中用逗号分隔。

如下:

import ="mila.HMM.MorphMult2TaggerFormat, mila.HMM.HMM2Morph, mila.mw.PostProcessor1,mila.mw.MWXMLTokenizer"

【讨论】:

  • 所以我应该将所有导入更改为 import = "class1, class2, class3, ... "?
  • 不幸的是,这不起作用,我也尝试重新启动tomcat。
  • 您是否在第一个导入语句中添加了“mila.HMM.MorphMult2TaggerFormat, mila.HMM.HMM2Morph, mila.mw.PostProcessor1,mila.mw.MWXMLTokenizer”?如果否,请先添加。
  • 不,他们在最后。但这有什么区别? (现在将尝试替换它们)。
  • 并在重启前删除你在tomcat中的工作目录
猜你喜欢
  • 1970-01-01
  • 2015-10-02
  • 2017-12-20
  • 2013-04-04
  • 2016-06-09
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多