我在Eclipse Indigo下创建了maven-achetype-quickstart的简单项目,然后我在pom.xml gui编辑器和依赖项选项卡中通过搜索在适当的对话框中添加了依赖项log4j
。现在我的pom.xml看起来像
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org xsd/maven-.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mygroup</groupId>
<artifactId>Test_Maven_03</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Test_Maven_03</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Eclipse说我的POM有很多问题,比如
缺少工件javax.jms:jms:jar:1.1 pom.xml / Test_Maven_03第2行Maven依赖问题
这是什么意思以及如何查看自动jar下载的maven功能。
编辑1
如果我选择log4j 1.2.16而不是1.2.15,我会收到另一个错误:Missing artifact log4j:log4j:bundle:1.2.16
。所以我看不到任何自动jar管理。
答案 0 :(得分:100)
如果我没记错的话,由于许可问题,它不再包括在内。如果您不需要jms功能,可以从log4j依赖项中排除jms:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 1 :(得分:43)
将log4j的版本更改为1.2.16。
正如您所发现的,1.2.15的元数据很糟糕,因为中央存储库中缺少依赖项。但是,存在不更改中央maven存储库中的工件或元数据的策略,因为这可能导致构建不可重复。也就是说,如果工件或其元数据发生更改,构建可能会有不同的行为。
理由是,解决错误的元数据比解决不可复制的构建问题更好。
当然,如果项目维护者对他们上传到中心的元数据更加谨慎,那就更好了。
答案 2 :(得分:11)
使用Log4J 1.2.16 (the one I linked to in your earlier question);它没有旧的JMX依赖,而是从Geronimo获取它。
答案 3 :(得分:1)
上面的答案(不包括JMX )很好,只要你不需要任何JMX依赖项。但是,您永远无法从标准maven存储库下载JMX依赖项的.jar文件。引用Jörg Schaible-3 at nabble.com:
这是正常的,它会保持不变,因为Sun / Oracle从未授予过 这些工件的分发权限作为单独的下载。你将会有 从Oracle下载它们,接受它们的许可证,并将它们添加到 本地存储库管理器。
因此,如果您想使用JMX,则需要从Oracle's website下载相应的jmx zip文件夹。