Java Maven:如何避免依赖关系?

Java Maven:如何避免依赖关系?,java,spring,maven,jstl,Java,Spring,Maven,Jstl,我是马文的新手。我最近学习了它来解决我在Java和SpringWebApp中遇到的一些依赖性问题。我一直在一个小样本网络应用程序上试用maven。webapp使用JSTL标记。我发现有必要将这些标记放在pom.xml中: <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId>

我是马文的新手。我最近学习了它来解决我在Java和SpringWebApp中遇到的一些依赖性问题。我一直在一个小样本网络应用程序上试用maven。webapp使用JSTL标记。我发现有必要将这些标记放在pom.xml中:

   <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2-rev-1</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jstl-impl</artifactId>
        <version>1.2</version>
    </dependency>
但它也在我的WEB-INF/lib中包含了这个jar,当我尝试在Tomcat 7中运行它时,包含它会导致各种错误:

jsp-api-2.1.jar
有没有一种方法可以重写我的依赖项标记,使jsp-api-2.1.jar离开我的WEB-INF/lib

谢谢


固定的。谢谢各位。FWIW,这就是我如何更改JSTL的依赖项标记,以不将JSP-API jar放入我的WEB-INF库中的方法:

   <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2-rev-1</version>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jstl-impl</artifactId>
        <version>1.2</version>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

javax.servlet.jsp.jstl

将范围更改为“提供”。例如:

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jstl-impl</artifactId>
    <version>1.2</version>
    <scope>provided</scope>
</dependency>

org.glassfish.web
jstl impl
1.2
假如

提供的作用域确保编译器可以使用jar,但假定在运行代码时将在运行时“提供”jar。在您的演员阵容中,它由Tomcat提供。

有排除部分,类似于下面的部分

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate</artifactId>
  <version>3.2.6.ga</version>
  <exclusions>
    <exclusion>
      <groupId>javax.transaction</groupId>
      <artifactId>jta</artifactId>
    </exclusion>
  </exclusions>
</dependency>

org.hibernate
冬眠
3.2.6.ga
javax.transaction
jta

在您的情况下,您添加的一个(或两个)依赖项包括您不需要的依赖项。找到哪一个,并添加排除部分。

在这种情况下,最好将javax.servlet.jsp.jstl:jstl api放在“提供”范围内?似乎这个工件就是实际的实现。罗伊,这不是我想要避免的罐子。我需要您在我的WEB-INF/libvirtual-Real中提到的那个,感谢您提供的关于这两个依赖项的提示,这两个依赖项可能都包含在另一个jar中。两人都这样做了。幸运的是,我找到了这个很棒的站点,在这里,您可以查找Maven informaiton以制作依赖项标记:
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate</artifactId>
  <version>3.2.6.ga</version>
  <exclusions>
    <exclusion>
      <groupId>javax.transaction</groupId>
      <artifactId>jta</artifactId>
    </exclusion>
  </exclusions>
</dependency>