我是 maven 新手,正在将一个 java web 应用程序转换为 maven(而不是由我的 IDE 管理)。我知道可以在本地安装依赖项(第一选择)或将其声明为提供的依赖项(第二选择)。我读到了什么groupId
,,artifactId
和version
意思。但是,它没有解释如何确定罐子的确切坐标。
例如,有问题的 jar(apache-tomcat 7.0.34 的 servlet-api.jar)在 jar 中没有 pom.xml 文件。
当你有一个随机的 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)
阅读其他答案提醒我,使用 Java EE jar,我发现最好使用通用版本来构建您的应用程序。对 Maven 范围使用“提供”。容器将提供真正的 jar,如果它不是完全标准的,您将不会使用非标准部件,因为您的构建使用了通用版本。
因此,例如,您可以使用以下方式构建:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
我通常做的是访问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 只会在编译期间存在于您的类路径中,但在运行时它将由容器提供
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 中依赖项的“提供”类型。