我是maven的新手,正在将java web应用程序转换为maven(而不是由我的IDE管理)。我知道可以在本地安装依赖项(第一选择)或将其声明为提供的依赖项(第二选择)。 I read about groupId
,artifactId
和version
是什么意思。但是,它并没有解释如何确定罐子的确切坐标。
The jar in question (servlet-api.jar of apache-tomcat 7.0.34),jar中没有pom.xml文件。
答案 0 :(得分:2)
如果你有一个随机的jar文件,在这种情况下是servlet-apr.jar,存在于某个文件夹中,你必须找出它是否与某个版本相同。
<依赖性>
<&的groupId GT; org.apache.tomcat< /&的groupId GT;
< artifactId的> servlet的API< / artifactId的>
<版本> 6.0.36< /版本>
< /依赖性>
但它不是你的。 (又过了30秒,我发现了这个:mvnrepository servlet-api for tomcat 7.0.34)
阅读其他答案提醒我,使用Java EE jar,我发现最好使用通用版本来构建应用程序。使用“提供”作为maven范围。容器将提供真正的jar,如果它不是完全标准的,你将不会使用非标准部件,因为你的构建使用了通用版本。
因此,例如,您可以使用:
构建<依赖性>
<&的groupId GT;&的javax.servlet LT; /&的groupId GT;
< artifactId的> servlet的API< / artifactId的>
<版本> 2.4< /版本>
<范围>条件< /范围>
< /依赖性>
答案 1 :(得分:1)
我通常做的是转到http://search.maven.org并寻找罐子,例如:servlet-api.jar。你也可以进行完全限定的类名搜索,例如,如果你知道你的jar里面有一个类javax.servlet.http.HttpServletRequest,你可以搜索 fc:javax.servlet.http.HttpServletRequest 和它将列出包含此类的所有罐子
但是请记住servlet-api.jar的情况 - 它不应该捆绑到你的战争/耳朵中,因为它应该由容器提供(在这种情况下是tomcat)。通常,创建Java EE项目时的最佳实践是在提供的范围中包含对javax.servlet:servlet-api:2.5(或容器支持的其他版本)的依赖性。因此,jar只会在编译期间存在于类路径中,但在运行时它将由容器
提供答案 2 :(得分:0)
Maven工件(JAR文件)将位于例如
~/.m2/repository/org/apache/tomcat/artifact/version/
如果我没记错的话,servlet-api.jar文件将位于〜/ .m2 / repository / javax / servlet / servlet-api / 2.5 /中 - 假设您使用的是servlet规范的2.5版本。
但是,servlet-api总是由应用程序容器提供,因此Maven POM中的“提供”类型的依赖项。