如何配置 pom.xml 文件以使用 Nexus 存储库管理器

问题描述 投票:0回答:3

我正在使用

Redhat
java 1.7
maven 3.2.5
jenkins 1.6
git version 2.0.5
nexus-2.12.0-01

我为我的内部发展创建了一个本地

Nexus Repository
。 现在我想做的是,使用
maven
jenkins
构建
Nexus Repository Manger Oss
项目。 我能够在没有
Nexus Repository Manger Oss
的情况下构建我的项目。

注意:我正在使用父项目

pom
,因为我必须子项目。

以下是我遵循的步骤

  • 已安装

    Nexus Repository Manger Oss
    。已启动并运行
    这是屏幕截图。

    Nexus repository is up and running

  • 在 nexus 存储库中安装了 ojdbc5 jar

    2

  • 对.m2文件夹的setting.xml文件进行了必要的更改

这里是

setting.xml

的内容
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0                                                           http://maven.apache.org/xsd/settings-1.0.0.xsd">

    <mirrors>
        <mirror>
        <!--This sends everything else to /public -->
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://localhost:8081/nexus/content/groups/public</url>
        </mirror>
    </mirrors>

    <activeProfiles>
        <!--make the profile active all the time -->
        <activeProfile>nexus</activeProfile>
    </activeProfiles>

    <profiles>
        <profile>
            <id>nexus</id>
          <repositories>
          <repository>
          <id>central</id>
          <url>http://maven.apache.org</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
          </repository>
            </repositories>

            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://maven.apache.org</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

    <servers>
      <server>
       <id>releases</id>
       <username>deployment</username>
       <password>deployment123</password>
      </server>
      <server>
        <id>snapshots</id>
        <username>deployment</username>
        <password>deployment123</password>
      </server>
    </servers>

</settings> 
  • 在我的
    pom.xml
  • 中添加了nexus存储库的详细信息

家长

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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>parent</groupId>
  <artifactId>A</artifactId>
  <packaging>pom</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>Maven Webapp</name>
  <!--url>http://maven.apache.org</url-->

  <distributionManagement>
    <repository>
      <id>releases</id>
      <url>http://localhost:8081/nexus/content/repositories/thirdparty/</url>
    </repository>
    <snapshotRepository>
      <id>snapshots</id>
      <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
  </distributionManagement>

  <dependencies>
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc5</artifactId>
      <version>11.2.0.1</version>
    </dependency>
  </dependencies>

  <modules>
    <module>subModule1</module>
    <module>subModule2</module>
  </modules>
</project>

SubModule1 的 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.a</groupId>
  <artifactId>a</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Maven Webapp</name>

  <distributionManagement>
    <repository>
      <id>releases</id>
      <!-- CHANGE HERE by your team nexus server -->
      <url>http://localhost:8081/nexus/content/repositories/thirdparty/</url>
    </repository>
    <snapshotRepository>
      <id>snapshots</id>
      <!-- CHANGE HERE by your team nexus server -->
      <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
  </distributionManagement>

  <dependencies>
    // dependecies are defined here
  <dependencies>

subModule1
subModule2
中,我添加了
distributionManagement
部分。

但是当我构建项目时,出现以下错误。

[错误] 无法在项目子模块 1 上执行目标:无法 解决项目 submodule1:war:1.0-SNAPSHOT: 失败的依赖关系 找到 com.oracle:ojdbc5:jar:11.2.0.1 中 https://repo.maven.apache.org/maven2 已缓存在本地 存储库,在更新之前不会重新尝试解析 中心间隔已过或强制更新 -> [帮助 1]

我知道该错误是由

com.oracle:ojdbc5:jar:11.2.0.1
jar 依赖项无法解析引起的。

但我很惊讶为什么它没有从我的本地 Nexus 存储库中获取它。

我是否遗漏了任何配置,或者我是否以错误的方式进行了配置?

如何在我的项目中使用本地 Nexus 存储库?

maven jenkins pom.xml nexus parent-pom
3个回答
0
投票

在你的settings.xml中,通常在你的~/.m2/目录中,你需要指定你的本地Nexus。默认情况下你只能获得 Maven Central。

 <profile>
        <id>local</id>
        <repositories>
            <repository>
                <id>nexus</id>
                <name>libs-release</name>
                <url>http://url to your local Nexus/artifactory/libs-release</url>
            </repository>
        </repositories>
 </profile>

您可以添加任意数量的存储库元素。

确保正确的配置文件处于活动状态,位于 settings.xml 底部

  <activeProfiles>
    <activeProfile>local</activeProfile>
  </activeProfiles>

此外,您的 ~/.m2/repository/com/oracle ... 文件夹中还会留下一个存根。我总是执行 rm -r ~/.m2/repository/com/oracle 来强制它从远程存储库下载。


0
投票

您的settings.xml未正确覆盖中央存储库配置。正确的设置可以在文档中找到。

还有示例项目可供使用,一切准备就绪,并且评估指南包含分步指南。


0
投票

这是我的settings.xml 文件-

<localRepository>C:/Users/shuarya/.m2/repository</localRepository>
<interactiveMode>true</interactiveMode>
<offline>false</offline>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies> 
<servers>  
</servers>
<mirrors>
    <mirror>
  <!--This sends everything else to /public -->
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <url>http://localhost:8081/nexus/content/repositories/com.shubham.TestNexus2</url>
 </mirror>
</mirrors>
<profiles>
<profile>
   <id>nexus</id>
  <!--Enable snapshots for the built in central repo to direct -->
  <!--all requests to nexus via the mirror -->
  <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>
<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>

因此,在我的 settings.xml 文件中,我指定了本地存储库的路径,并且在底部我选择了我的活动配置文件作为 nexus。在 nexus 节点内,我指定了本地托管的 nexus 存储库的路径。

而且,我没有在我的 pom.xml 中指定任何 URL

    <modelVersion>4.0.0</modelVersion>
<groupId>com.shubham.example</groupId>
<artifactId>TestingNexusrepo</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>

    <dependency>
        <groupId>com.shubham.TestNexus</groupId>
        <artifactId>TestNexus</artifactId>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>com.shubham.TestNexus2</groupId>
        <artifactId>TestNexus2</artifactId>
        <version>1</version>
    </dependency>

</dependencies>
</project>

项目构建时,它会从存储库下载 jar 并将其保存在本地存储库路径中。这样,将来当您指定此(相同)依赖项时,它会从本地存储库获取依赖项,而不是从 Nexus 存储库再次下载它(缓存)。

这对我有用,如果我的理解错误,请告诉我。

另外,有什么方法可以为 nexus 存储库指定多个 URL。

请帮忙。

© www.soinside.com 2019 - 2024. All rights reserved.