3

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

例如,有问题的 jar(apache-tomcat 7.0.34 的 servlet-api.jar)在 jar 中没有 pom.xml 文件。

4

3 回答 3

2

当你有一个随机的 jar 文件,在这种情况下是 servlet-api.jar,出现在某个文件夹中时,你必须四处寻找它是否与某个版本相同。

:查看罐子内部并记下其中文件的日期(或日期范围)。您可能会注意到那里有哪些文件。你可能需要那个细节。

:去可以找罐子的地方。我喜欢http://mvnrepository.com/,您可以在其中输入 jar 的名称。“servlet api”。我在大约 10 秒内找到了这个:

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifact>servlet-api</artifactId>
    <version>6.0.36</version>
</dependency>
        

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

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

阅读其他答案提醒我,使用 Java EE jar,我发现最好使用通用版本来构建您的应用程序。对 Maven 范围使用“提供”。容器将提供真正的 jar,如果它不是完全标准的,您将不会使用非标准部件,因为您的构建使用了通用版本。

因此,例如,您可以使用以下方式构建:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.4</version>
    <scope>provided</scope>
</dependency>
于 2013-01-30T20:48:10.357 回答
2

我通常做的是访问http://search.maven.org并查找 jar,例如:servlet-api.jar。您还可以进行完全限定的类名搜索,例如,如果您知道 jar 中有一个类 javax.servlet.http.HttpServletRequest,您可以搜索fc:javax.servlet.http.HttpServletRequest,它将列出所有包含此的 jar班级

但是请记住,在 servlet-api.jar 的情况下——它不应该被捆绑到你的 war/ears 中,因为它应该由容器提供(在这种情况下是 tomcat)。通常,创建 Java EE 项目时的最佳实践是在提供的范围内包含对 javax.servlet:servlet-api:2.5(或容器支持的其他版本)的依赖项。因此,jar 只会在编译期间存在于您的类路径中,但在运行时它将由容器提供

于 2013-01-30T21:50:40.293 回答
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 中依赖项的“提供”类型。

于 2013-01-30T20:58:48.540 回答