「タイプのみインポートできます。XYZはパッケージに解決します。」というエラーが表示されます。
誰かが原因を説明しました here しかし、私はこれを修正するために何をすべきかわかりません。参考までに、私はEclipseを使用しています。以下にインポートを行うコードを追加しました。 Java.util。*インポートは正常に機能します。
<%@ page import="Java.util.*"%>
<%@ page import="org.eresearch.knowledgeportal.model.Category"%>
<%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao"%>
<%
CategoryDao catDao = new CategoryDao();
ArrayList<Category> catList = catDao.selectCategory();
//
%>
編集:実際のエラーは以下のとおりです。
org.Apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 7 in the generated Java file
Only a type can be imported. org.eresearch.knowledgeportal.model.Category resolves to a package
OK解決しました。最後のインポートで「;」を追加しました他のコード例をコピーします。必要なのは標準の行末です。
そう
<%@ page import="Java.util.*" %>
<%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao" %>
<%@ page import="org.eresearch.knowledgeportal.model.Category" %>
なりました
<%@ page import="Java.util.*" %>
<%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao" %>
<%@ page import="org.eresearch.knowledgeportal.model.Category;" %>
まあ、あなたは実際にあなたのwebappに十分な詳細を提供していませんが、私の推測ではあなたはそのようなものを持つJSPを持っていると思います:
<%@ page import="Java.util.*,x.y.Z"%>
また、x.y.Z
がクラスパスに見つかりません(つまり、WEB-INF/classes
の下にもWEB-INF/lib
のJARにもありません)。
TomcatにデプロイするWARが次の構造を持っていることを再確認してください。
my-webapp
|-- META-INF
| `-- MANIFEST.MF
|-- WEB-INF
| |-- classes
| | |-- x
| | | `-- y
| | | `-- Z.class
| | `-- another
| | `-- packagename
| | `-- AnotherClass.class
| |-- lib
| | |-- ajar.jar
| | |-- bjar.jar
| | `-- zjar.jar
| `-- web.xml
|-- a.jsp
|-- b.jsp
`-- index.jsp
または、x.y.Z.class
をバンドルするJARがWEB-INF/lib
の下に存在すること。
クラス名のスペルを間違えたり、クラスがクラスパス上にない場合、JSPプロセッサは、それが存在しないというよりも、「パッケージに解決する」と言います。これは、私が作ったタイプミスを見ていなかったので、今日私を狂わせていました。
Netbeansでこのエラーが発生しました。どこからともなく現れるこのようなほとんどの奇妙なエラーと同様に、プロジェクトのプロパティに移動し、ソース/バイナリ形式を変更し(何でも構いません)、クリーンとビルドを行います。
詳細がなければ、クラスのインポート宣言のエラーのように聞こえます。すべてのインポート宣言がパッケージまたはすべてのクラスからすべてのクラスをインポートするかどうかを確認します。
import all.classes.from.package.*;
import only.one.type.named.MyClass;
編集
編集後、jspの問題のように見えます。
Edit 2
ここに別のフォーラムエントリがあります 、問題には類似点があるようで、被害者はEclipseを再インストールすることでそれを解決しました。私は最初にそれを試してみます-最も必要なプラグイン、新しいワークスペース、そのクリーンなワークスペースにインポートされたプロジェクトのみでEclipseの2番目のインスタンスをインストールし、最高のものを望みます...
Tomcatのlibディレクトリにjarを追加することで解決しました。
クラスの名前の大文字と小文字を変更した後、この奇妙なエラーも発生しました。ファイルは期待どおりにTomcatサーバーにコピーされなかったため、手動で削除して再デプロイする必要がありました。大文字と小文字を区別しないオペレーティングシステムを使用しているためでしょうか?
私にとって、それは間違った展開でした。適切に展開され、すべてが機能します(詳細については、 私の質問 を確認してください)。
この投稿に返信するのは遅すぎることはわかっていますが、明確な答えが見当たらないため、とにかくそれを行います...
eclipseでMANIFEST.MF
のMETA-INF
をチェックアウトしたい場合があります。
クラスファイルのパスを追加する必要があるかもしれません。
Class-Path: WEB-INF/classes
.classファイルを個別に生成し、関連するパッケージにワークスペースに貼り付けます。プロジェクトを更新します。
だから私は同じ問題を抱えていて、自分の解決策を提供したかっただけです。誰かが同じ問題に直面しているのかもしれません。
アーティファクトを適切に構成していましたが、何らかの形でintellijが何かを混ぜて、アーティファクトの1つでWEB-INFフォルダーを削除しました。
.warファイルの内容を表示すると、すべてのクラスが正しいフォルダー構造に存在していました。だから私は何かが欠けているとは思わなかった。しかし、Intellijのアーティファクトを確認し、動作中のアーティファクトと比較すると、クラスとライブラリを含むWEB-INFフォルダーが存在しないことに気付きました。
それらをアーティファクトに追加すると、動作するはずです。
TLDR:Intellijが.warアーティファクトのWEB-INFフォルダーを削除しました。あなたのものも欠けているかどうかを確認してください。 (プロジェクト構造->アーティファクト)
私の貢献:3lpという名前のパッケージを作成したため、このエラーが発生しました。ただし、Java仕様によると、パッケージの先頭に数字を付けることはできません。私はそれを_3lpに変更しましたが、今では動作します。
Mavenを使用し、JavaクラスをJARとしてパッケージ化する場合は、JARが最新であることを確認してください。もちろん、JARがクラスパスに含まれていると想定しています。
同様の問題がありました。 Eclipseでは、プロジェクトを(mavenアーキタイプによって生成された)正常に動作しているサンプルプロジェクトと比較しました。プロジェクトの/.classpathファイルの2行が欠落していることがわかりました。これらの2行をコピーし、問題を修正しました。プロジェクトの設定でビルドパスを設定しても、Eclipseが何らかの理由でそれに応じて更新されていないようです。
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/Java"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/Java"/>
...
</classpath>
私の賭けは、org.ivec.eresearch.knowledgeportal.model .category(small c
)というパッケージがあり、WindowsやMacなどの大文字と小文字を区別しないファイルシステムで実行していることです。クラスとパッケージが存在すると、コンパイラが混乱するようです。
クラス「Category」またはパッケージ「category」の名前を変更すると、このエラーはなくなります。残念ながら、これがTomcatかECJのバグなのかわかりません。
これは通常、(同じjspページで)静的jspインポートを混合するときに発生します。
<%@include file="...
ダイナミックjspインポートの場合:
<jsp:include page="...
そして、あなたのタイプは「静的インポート」jspによってすでにインポートされています。 「動的にインポートされた」jspで同じタイプを使用(およびインポート)する必要がある場合->これにより、例外が生成されます:「タイプのみインポートできます...」
インポートしたクラスを含むjarファイルをWEB-INF/Lib
に追加して解決しました。
次のように、クラス、enum、またはinterfaceeなど、パッケージから何かをインポートする必要があります。
import some.package.SomeClass;
または、パッケージからすべてをインポートします(推奨されません)
import some.package.*;
編集:多分私は十分に近く読みませんでした。ファイルシステム上のどこからインポートしようとしているパッケージはありますか? WEB-INF/libの下にありますか?
詳細はありますか? (これはリンクされたWebページのようにJSPにありますか?)
その場合、いつでも完全修飾クラス名を使用できます。
のではなく:
import foo.bar.*;
Baz myBaz;
使用できます
foo.bar.Baz myBaz;
この例外も取得しました。
環境:サーバービューを使用してEclipse内からTomcatを実行するEclipseを搭載したMac。
何らかの理由で、Eclipseはclasses
フォルダーをWEB-INF
にコピーしません。 classes
フォルダーを手動でコピーした後、すべてが正常に機能します。
わからない、またはEclipseのバグであるか、何かを見逃した。
私のようにオーバーライドされたクラスをインポートしようとしていますか?
その場合、オーバーライドされたクラスは間違ったパッケージにあるか、単に存在しません。
クラスを作成または正しい場所(src/[package.package]。[class])に移動すると、問題が解決する可能性があります。