我在过去几天尝试了webservices和jboss4,我偶然发现了以下问题:
我在pom.xml中包含了这个依赖项:
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jboss-jaxws</artifactId>
<version>4.2.2</version>
</dependency>
事实证明,这导致JBoss4失败并显示错误消息
java.lang.IllegalStateException:找不到端点元数据
直到我添加了一条小小的线
<scope>provided</scope>
依赖。我现在明白这个问题是由JBoss4自己带来这个库的事实引起的,并且它是同一个库(可能是2个不同版本)的双重包含导致了这个问题。但现在,当我查看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
我如何知道哪个罐子对应哪个maven工件?我怎么知道我的.m2 / repository文件夹中的任何一百万个文件中包含哪些groupid,artifactid和版本号?
答案 0 :(得分:3)
Jboss提供/包含的所有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工件。
答案 1 :(得分:1)
人工制品名称总是$ {artifactId} - $ {version}。$ {type}
在你的情况下:jboss-jaxws-4.2.2.jar
。
您只是在不好的地方寻找它,您正在谈论的lib
文件夹必须是统一的类加载器之一,您正在寻找的库必须由服务器类加载器加载,即它必须驻留在JBOSS_HOME/modules
[修改强>] 当Ferdinand Neman说jboss与maven无关时,他是对的。 pom中的依赖关系声明只允许maven构建和打包你的项目。运行时行为取决于您的目标环境,唯一需要确保的是,必须在类加载期间解析依赖项,无论是因为它们与项目打包在一起还是由运行时环境提供。
无论如何,jar jboss-jaxws-4.2.2.jar必须存在于您的工作站上(在本地maven存储库中)以允许在maven编译期间进行类链接,因为jar被标记为提供它将不包含在由此产生的构造文物。
答案 2 :(得分:0)
也许你觉得这个maven命令很有用
mvn dependency:tree -Dverbose
它显示了jar依赖关系,按组工件分类,它还表示它们之间的依赖关系作为树。