Maven artifactid 如何连接到文件?

How is a maven artifactid connected to a file?

我在过去几天尝试了网络服务和 jboss4,我偶然发现了以下问题:

我在 pom.xml 中包含了这个依赖项:

<dependency>
    <groupId>org.jboss</groupId>
    <artifactId>jboss-jaxws</artifactId>
    <version>4.2.2</version>
</dependency>

事实证明,这导致 JBoss4 失败并显示错误消息

java.lang.IllegalStateException: Cannot find endpoint meta data

直到我添加了那条小线

<scope>provided</scope>

依赖。我现在明白这个问题是由 JBoss4 自己带来这个库这一事实引起的,并且是同一个库(可能是两个不同版本)的双重包含导致了这个问题。但是现在,当我查看 JBoss lib 文件夹时,我看到以下文件:

commons-codec.jar
commons-httpclient.jar
commons-logging.jar
concurrent.jar
endorsed
getopt.jar
jboss-common.jar
jboss-jmx.jar
jboss-system.jar
jboss-xml-binding.jar
log4j-boot.jar

我如何知道哪些 jar 对应于哪个 maven 神器?我如何知道我的 .m2/repository 文件夹中的任何一个文件属于哪个 groupid、artifactid 和版本号?

也许你会发现这个 maven 命令很有用

mvn dependency:tree -Dverbose

它向您显示 jar 依赖项,按组工件分类,它还将它们之间的依赖关系表示为树。

工件名称始终为 ${artifactId}-${version}.${type} 在你的情况下:jboss-jaxws-4.2.2.jar.

你找的地方不对,你说的lib文件夹一定是统一的classloader,你要找的库必须由服务器 classloader 加载,即它必须位于 JBOSS_HOME/modules

[编辑] Ferdinand Neman 说 jboss 与 maven 无关是正确的。 pom 中的依赖声明只允许 maven 构建和打包你的项目。运行时行为取决于您的目标环境,唯一要确保的是您的依赖项必须在 class 加载期间解析,无论是因为它们是与您的项目打包在一起的还是由运行时环境提供的。

无论如何,jar jboss-jaxws-4.2.2.jar 必须出现在您的工作站上(在本地 maven 存储库中)以允许 class 在 maven 编译期间进行链接,因为该 jar 被标记为提供它不会包含在生成的构建工件中。

Jboss provided/included 中的所有 jar 文件都与 maven 无关。他们在那里只是为了 jboss 它自己 运行。其他想要在容器中 运行 的应用程序需要提供他们自己的库集。但是,有时,JBoss 提供的某些库足以满足应用程序的需求(因为它们将运行在同一个 VM 上),因此您无需提供自己的库。您将那些提供的库用于您的开发目的,稍后,当您部署时,您不会将它们包含在您的部署中。

因此,无法确定 JBOSS 提供的哪个 Jar 应该与 maven 存储库中的哪个 artifactId 或 groupId 或版本相关,除非对它们的名称有一些提示。

例如,如果您看到 Jboss 带来了 "commons-codec.jar"。不知道 jar 来自 Maven 中的哪个 artifactId 或 groupId 或版本。您可能会猜测 "commons-codec" 应该是某个神器的名称。 http://mvnrepository.com/ 之类的站点可帮助您找到可能与您正在调查的 jar 相关的相关 Maven 工件。