如何在本地lib目录中确定此jar的maven坐标?

时间:2013-01-30 20:42:06

标签: java maven build jar

我是maven的新手,正在将java web应用程序转换为maven(而不是由我的IDE管理)。我知道可以在本地安装依赖项(第一选择)或将其声明为提供的依赖项(第二选择)。 I read about groupIdartifactIdversion是什么意思。但是,它并没有解释如何确定罐子的确切坐标。

例如,

The jar in question (servlet-api.jar of apache-tomcat 7.0.34),jar中没有pom.xml文件。

3 个答案:

答案 0 :(得分:2)

如果你有一个随机的jar文件,在这种情况下是servlet-apr.jar,存在于某个文件夹中,你必须找出它是否与某个版本相同。

  • 查看jar内部并记下其中文件的日期(或日期范围)。您可能会注意到那里有哪些文件。您可能需要这些细节。
  • 去某个你可以寻找罐子的地方。我喜欢http://mvnrepository.com/,您可以在其中输入jar的名称。 “servlet的API”。我在大约10秒内找到了这个:

<依赖性>
    <&的groupId GT; org.apache.tomcat< /&的groupId GT;
    < artifactId的> servlet的API< / artifactId的>
    <版本> 6.0.36< /版本>
< /依赖性>

但它不是你的。 (又过了30秒,我发现了这个:mvnrepository servlet-api for tomcat 7.0.34

  • 然后,您可以下载您认为匹配的那个并查看其中的日期是否匹配。
  • 从这里开始基本上是侦探工作。您可能会找到具有maven“坐标”的确切jar,您可能不会。

阅读其他答案提醒我,使用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中的“提供”类型的依赖项。