4

私のセットアップ:jdk 7、Tomcat 7.0.29、Eclipse Juno(m2e [Maven 3.0.4組み込み]、m2eclipse-wtp)

このJSTL依存関係を持つ動的 Web プロジェクトがあります。

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>javax.servlet.jsp.jstl</artifactId>
    <version>1.2.1</version>
</dependency>

Tomcatにmvn packageデプロイすると、アプリのデプロイを停止しない致命的ではないメッセージがログに記録されます。

validateJarFile(...\WEB-INF\lib\jsp-api-2.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
validateJarFile(...\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

問題の JAR が WAR にパッケージ化されていることを確認しました。私は依存関係をチェックし、mvn dependency:treeこれを取得します:

[INFO] \- org.glassfish.web:javax.servlet.jsp.jstl:jar:1.2.1:compile
[INFO]    \- javax.servlet.jsp.jstl:jstl-api:jar:1.2:compile
[INFO]       +- javax.servlet:servlet-api:jar:2.5:compile
[INFO]       \- javax.servlet.jsp:jsp-api:jar:2.1:compile

両方の JAR がcompileスコープに表示されていますが、 pom.xmlを確認すると、次のように表示されorg.glassfish.web:javax.servlet.jsp.jstl:jar:1.2.1ます。

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.2</version>
  <scope>provided</scope>
</dependency>

それはスコープにそれらを示していますprovided。これにより、パッケージから除外されると思いました。

質問:

  1. これらの JAR を含めないように WAR プラグインに指示するにはどうすればよいですか? <excludes/>ビルドパスからも削除されるため、カットしません。
  2. Servlet 3.0 仕様に基づいて開発したいが、この JSTL バージョンを維持したい場合はどうすればよいですか?
4

2 に答える 2

2

それを理解すると、jsp-apiはjstlの遷移依存関係としてWEB-INF \ libに忍び込んでいました。修正は、そのように除外することです。

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>javax.servlet.jsp.jstl</artifactId>
    <version>${javax.jstl.version}</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
        <exclusion>
            <artifactId>jsp-api</artifactId>
            <groupId>javax.servlet.jsp</groupId>
        </exclusion>
    </exclusions>
</dependency>
于 2012-11-17T06:13:13.000 に答える
1

バージョン1.2.1 の場合:

<!-- add the selvlet-api that tomcat provides as provided -->
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>javax.servlet.jsp.jstl-api</artifactId>
    <version>1.2.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>javax.servlet.jsp.jstl</artifactId>
    <version>1.2.1</version>
    <exclusions>
         <!-- jstl-api was adding selvlet-api 2.5 and jsp-api-->
        <exclusion>
            <artifactId>jstl-api</artifactId>
            <groupId>javax.servlet.jsp.jstl</groupId>
        </exclusion>
    </exclusions>
</dependency>

そうでない場合、jstl-api 1.2が依存関係として追加されるためです。jsp-api と servlet-api の依存関係を追加したのは jstl-api です。

于 2014-06-28T16:06:43.080 に答える