本地 Nexus 存储库通过 POM 依赖提取除主 jar 之外的所有内容

Local Nexus repository pulls everything but the main jar through POM dependency

我们本地的 Nexus 存储库在下载依赖项时似乎不一致。它会拉下 pom,甚至测试罐子等......但不是我需要的主要实际罐子!因此,当我在 drools-compiler 的中央(代理)存储库上浏览索引时:org/drools/drools-compiler 我看到以下文件:

缺少的关键文件是:
drools-compiler-6.2.0.CR4.jar

当我浏览远程时,一切都在那里,包括关键的 jar。

当我 运行 mvn clean install(通过我的 IDE STS 3.6.3)时,我最终看到以下错误消息:

Failed to execute goal on project :
Could not resolve dependencies for project :
Failed to collect dependencies at org.drools:drools-compiler:jar:6.2.0.CR4:
Failed to read artifact descriptor for org.drools:drools-compiler:jar:6.2.0.CR4:
Failure to find org.jboss.dashboard-builder:dashboard-builder-bom:pom:6.2.0.CR4 in was cached in the local repository, resolution will not be reattempted until the update interval of nexus has elapsed or updates are forced

过去有很多其他的依赖已经拉下来了,仓库已经存在很长时间了(我没有设置它,现在处理!)... JBoss 流口水不是我唯一一次看到这个,这只是我现在最紧迫的问题。

我用谷歌搜索了一下,有些帖子似乎相关,(这个 one 几乎相同但未解决)但似乎找不到解决方案。远程索引下载已在我们的本地 Jboss 和中央代理中设置。我尝试过清除缓存、重建索引、向我的 mvn 命令添加“-U”...但无济于事。我唯一可以构建项目的时间是完全绕过本地存储库(空 .m2/settings.xml)并直接从 Central 或 JBoss public 拉取。有人知道这里可能发生了什么问题吗?

更新: 可能有帮助的更多细节: 在我的settingx.xml(下)中定义为镜像的存储库'nexus'是一个组存储库,由(按此顺序)组成:
* 中环 (http://repo1.maven.org/maven2/)
* JBoss public (http://repository.jboss.org/nexus/content/groups/public/)
* 我们自己上传的本地 jar 的回购...

按照@Steve 的建议,我比丢失的 drools-compiler 文件更深入地挖掘,发现 org.jboss.dashboard-builder.dashboard-builder-bom... 在 Central 中不存在,有趣的是,但它确实存在于 JBoss 中。我的理解是,通过使用 Repos 组,如果找不到某些东西,它应该查询列表中的下一个 repo,对吗?非常感谢任何建议!

settings.xml:

  <mirrors>
    <mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>(local server)/nexus/content/groups/public</url>
    </mirror>    
  </mirrors>
  <profiles>
    <profile>
      <id>nexus</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>  
  </profiles>
  <activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>

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-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mypackage.here</groupId>
    <artifactId>TaskLaunchManager</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>TaskLaunchManager</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <app.name>task-launch-manager</app.name>
        <log4j.version>1.2.16</log4j.version>
        <junit.version>4.8.1</junit.version>
        <drools.version>6.2.0.CR4</drools.version>
        <slf4j.version>1.7.9</slf4j.version>
    </properties>

    <!-- Drools Maven BOM (Bill of Materials) -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.drools</groupId>
                <artifactId>drools-bom</artifactId>
                <type>pom</type>
                <version>${drools.version}</version>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.kie</groupId>
                <artifactId>kie-bom</artifactId>
                <type>pom</type>
                <version>${drools.version}</version>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- Required dependencies -->
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
        <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
            <scope>compile</scope>
        </dependency>       
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-internal</artifactId>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-decisiontables</artifactId>
        </dependency>

    </dependencies>

</project>

好的,问题已解决!它采取了几个步骤,其中一些步骤在 Whosebug 的其他地方提到并且已经尝试过但没有成功,但是这里的顺序真的很重要:

  1. dashboard-builder 工件不在 Maven Central 代理中,而是在 JBoss public 代理中。该代理需要在本地创建(已经创建)
  2. 由于需要从 Central 和 JBoss 获取工件,因此需要创建一个 Group 存储库来保存它们(它曾经是)
  3. 在组回购中,JBoss需要添加到它......(它没有facepalm)......它仍然被列出'Available Repositories' 而不是 'Ordered Group Repositories'
  4. 即使在添加之后,由于缓存、未重建索引等原因,构建失败仍然存在。我需要使用“-U”开关强制更新,如本 Whosebug post 中所述:mvn clean install -U
  5. 即使在看到构建成功后,在我的 IDE 中项目仍然指示 pom.xml 中的错误。这是由于 m2eclipse... 并通过以下操作解决:Maven > 更新项目... > 检查“强制更新 Snapshots/Releases