Javaサーブレットがコンパイルされない - javax.servletが見つからない

私はJavaサーブレットをコンパイルするのに大きな問題があります。限り、私が見ることができる限り、私は私がする必要があるすべてのive、iveは正しく7をインストールして、そしてTomcatは動作している。私が理解するように、私はクラスパスにservlet.jarパッケージを追加する必要があります。私のシステム上ではservlet.jarではないようですが、tomcat docsから理解できるものから、現在はservlet-api.jarです。

これは、/etc/environment でクラスパスを編集することで行いました。

/ usr/local/bin /:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ usr / CLASSPATH = "/ usr/share/tomcat7/lib/servlet-api.jar"

残念ながら、まだ運がない、私はJavaサーブレットをコンパイルできません。また、imは javax.servlets のシンボルの欠落について警告を受け取ります。

私はubuntu 11.10 x64を使用しています。何か案は?

1

3 答え

/etc/environment

でクラスパスを編集して、      / usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ usr/games "CLASSPATH =" /usr/share/tomcat7/lib/servlet-api.jar "

それはうまく見えます。しかし、 PATH は特定の問題とは関係ありません。どのような方法でもJavaでは使用されていません。これは、オペレーティングシステムプラットフォームがexecutabelesを探すためにのみ使用します。 CLASSPATH は似ていますが、コンパイルや実行時に使用されるクラスを探すためにJavaでのみ使用されます。

あなたの問題は、 javac コマンドの -cp または -classpath 引数を使用したことが原因です。その場合、環境変数 CLASSPATH無視されます(これは java 引数が使用されます)。

-cpCLASSPATH 環境変数またはのいずれかでのみ code>または -classpath 引数を使用します。一般的な推奨は、単に "Hello World"以上のことをしたくないときは、環境変数 CLASSPATH を忘れることです。 を使用して、 -cp または -classpath 引数に複数のパスを指定できます。

$ cd /path/to/package/root/of/your/servlet/code
$ javac -cp .:/path/to/servlet-api.jar com/example/YourServlet.java

毎回これを繰り返し入力することに飽きた場合は、 .sh スクリプトに入れてください。あるいはAntのようなビルドツールを使ってXMLファイルで設定することもできますし、Eclipse、 NetbeansまたはIntelliJは、ソースファイルを保存するだけで自動的に実行します。

3
追加された

CLASSPATH環境変数を持つべきではありません。

より良い方法は、コンパイル時に javac.exe に、実行時に java.exe-classpath 引数を使用することです。 Tomcat servlet-api.jarをそのように追加します。

もう一つの提案は、Antを学ぶことです。これはXMLベースのJavaベースのビルドツールです。 Mavenよりも学びやすく使いやすくなっています。私はそれから始めるだろう。

2
追加された

javax.servlets is defined in servlet-api.jar so your issue must be with your config somehow. What are you using to compile? Are you issuing javac commands directly or using a build tool like maven, or ant, or event eclipse? I would recommend maven because it handles dependencies for you with a single configuration file. Really easy to pick up too.

Mavenでは、Mavenのインストール/設定を開始し、設定ファイル構造でプロジェクトを開始する必要があります(これは単純化されていても十分です):

/src/main/java - The root of your java files
/src/main/webapp - The root of your webapp
/pom.xml - Maven configuration file

したがって、サーブレットの完全なファイルリストは次のようになります。

/src/main/java/com/mycompany/myapp/MyServlet.java
/src/main/webapp/WEB-INF/web.xml
/src/main/webapp/index.jsp
/pom.xml

最初の3行(ルートファイル構造以外)は、どのWebアプリケーションでも同じですが、最後は次のような設定ファイルです:


  4.0.0
  com.mycompany
  myapp
  0.0.1-SNAPSHOT
  war

  
    
      javax.servlet
      servlet-api
      2.5
      jar
      provided
    
  

ここで重要な部分は、サーブレット-piへの依存がmavenによって処理されるため、それをダウンロードしたり、クラスパスなどを設定する必要がないことです。このファイル構造を設定してpomを編集したら、コンソールをルートに移動して mvn package と打ちます。それはあなたの依存関係をダウンロードし、コードをコンパイルし、あなたの戦争をパッケージ化します。 Mavenには最小限の変更しか加えられていません。対照的に、antはこれを必要とします:

追加する

2
追加された
"Maven"と "easy"は同じ文章には含まれません。
追加された 著者 duffymo,
私は大会をマスターしていない。恐らくそれにはまだ希望がありますが、私はAntがずっと簡単だと感じています。私は春のユーザーですから、私の依存関係のほとんどは簡単に利用できます。 Mavenは治療よりも頭痛が増えます。
追加された 著者 duffymo,
私はSpringとMavenの違いを知っています。私の主張は、Springをダウンロードするときに、すべての依存JARを正しいバージョンで取得することです。 Mavenには何が必要ですか?
追加された 著者 duffymo,
私は一度ダウンロードすることができ、私はすべて設定されています。すべての操作でMavenに耐えるのではなく、Springのバージョンをダウンロードするほうが簡単です。
追加された 著者 duffymo,
しかし、Springには必要な依存関係の99%が付属しています。それは私をかなりよく分類します。これは、独自のMavenリポジトリのようなものです。
追加された 著者 duffymo,
私はそれらをいつかしたいかもしれないし、彼らは私のハードドライブに座っても害はない。私は、私が欲しいものを選んで残りを残しています。まだMavenより簡単です。
追加された 著者 duffymo,
@duffymoバニラのアプリ、デフォルトのレポ、報告なしなどの単純なユースケースの場合は簡単です。それを過ぎると、時には本当の痛みに変わります。
追加された 著者 Dave Newton,
@duffymoすべてがそれ自身の依存関係を持っているわけではなく、特定の依存関係が実際に必要なものは常に明白です。 IMOでは、ほとんどの場合、推移的な依存関係の管理を他のものに処理させる方が良いです。
追加された 著者 Dave Newton,
@duffymo、私はemを広範囲に使いました。私はmavenがはるかに簡単であることを知っています。コンベンションに関する条約。非常にシンプルなコンベンションでは、無料でたくさんのことができます。最も重要なのは、この状況で特に便利な依存関係管理(あなたが理解しにくいアイビーを含めるとantが行うことができる)です。
追加された 著者 Lucas,
@duffymo、私はまったく春の男ですが、Springは依存性注入(ランタイムのもの)を行います。mavenは依存性管理を行います(コンパイル/テスト/ランタイムに必要なすべてのJARをクラスパスで利用できるようにします)。楽しみのために、私はここにいくつかの簡単な例を追加しようとします...
追加された 著者 Lucas,
@duffymo、ああ、私は参照してください。私は何かを実際にダウンロードしてからずっとずっと続いていたので、あなたが必要としていることを私が推測します。ダウンロードする必要はありません。そしてバージョンを変更するのは、pomの番号を変更するのと同じくらい簡単です(その時点で、すべての依存関係も更新されます)。また、依存関係を持つ他のパッケージが、春に持ち込まれた依存関係と矛盾しないことを保証します。Maven依存関係管理(またはあなたがそこに行きたい場合はIvy)は、私の経験では本当の人生の節約者でした。
追加された 著者 Lucas,
@duffymo、それはまた、(あなたがすべてのプロジェクトですべてを使用しない限り)たくさんのものが必要であることを意味します。
追加された 著者 Lucas,