缺少工件com.sun.jdmk:jmxtools:jar:1.2.1

Suz*_*ioc 49 java eclipse dependency-management pom.xml maven

我在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>
Run Code Online (Sandbox Code Playgroud)

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管理.

Sbh*_*klr 101

如果我没记错的话,由于许可问题,它不再包括在内.如果您不需要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>
Run Code Online (Sandbox Code Playgroud)

  • @Lightforce不需要为1.2.16执行所有这些操作. (2认同)
  • @SuzanCioc你被告知Log4J 1.2.15有什么问题; 其Maven元数据指向不再位于Maven存储库中的依赖项.如果您的简单示例不使用需要JMS的Log4J的功能,那么您的应用程序当然会编译 - Java运行时依赖项在运行时协调,而不是编译时间.如果您编译的任何内容都不依赖于编译类路径中不存在的类,并且没有任何内容依赖于不存在的运行时类,则不会出现任何问题. (2认同)

Mar*_*lis 43

将log4j的版本更改为1.2.16.

正如您所发现的,1.2.15的元数据很糟糕,因为中央存储库中缺少依赖项.但是,存在不更改中央maven存储库中的工件或元数据的策略,因为这可能导致构建不可重复.也就是说,如果工件或其元数据发生更改,则构建可能会有不同的行为.

理由是,解决错误的元数据比解决不可复制的构建问题更好.

当然,如果项目维护人员对他们上传到中心的元数据更加谨慎,那就更好了.


Dav*_*ton 11

使用Log4J 1.2.16(我在之前的问题中链接到的那个) ; 它没有旧的JMX依赖项,而是从Geronimo获取它.