如何使用Nexus而不是maven for Grails app

时间:2017-03-25 11:52:37

标签: maven grails nexus grails-plugin

我有一个使用来自maven的插件和依赖项的grails 2.5.3应用程序。现在,我想在公司内部使用Nexus服务器设置作为我的应用程序使用的所有依赖项的代理。但是,我之前从未使用过Nexus,所以我对事情的运作方式感到有些困惑。

我使用POM.xml为我的Grails应用生成grails create-pom com.mycompany。生成的pom具有以下artifactId

<groupId>com.mycompany</groupId>
<artifactId>myproj</artifactId>
<packaging>grails-app</packaging>
<version>1.0.0.R1</version>

然后我将以下内容添加到POM.xml

  <distributionManagement>
    <repository>
      <id>nexus</id>
      <name>Nexus Repo</name>
      <url>https://companynextus/content/repositories/myproj</url>
    </repository>
  </distributionManagement>

然后我运行mvn deploy

现在我可以在https://companynextus/content/repositories/myproj/com/mycompany/myproj/1.0.0.R1/

看到我的整个WAR文件和POM

此时我只需更改BuildConfig.groovy:

repositories {
    inherits true // Whether to inherit repository definitions from plugins

    grailsPlugins()
    grailsHome()
    mavenLocal()
    grailsCentral()
    mavenCentral()
}

要:

repositories {
    inherits true // Whether to inherit repository definitions from plugins

    grailsPlugins()
    grailsHome()
    grailsRepo "https://companynextus/content/repositories/myproj/com/mycompany/myproj/1.0.0.R1"
    mavenRepo "https://companynextus/content/repositories/myproj/com/mycompany/myproj/1.0.0.R1"
}

但我在执行grails prod war

时遇到错误
  

解决错误获取依赖项:无法找到工件org.grails.plugins:tomcat:zip:8.0.33 in   https://companynextus/content/repositories/myproj/com/mycompany/myproj/1.0.0.R1(https://companynextus/content/repositories/myproj/com/mycompany/myproj/1.0.0.R1)   (使用--stacktrace查看完整的跟踪)

2 个答案:

答案 0 :(得分:1)

我们创建了一个nexus存储库组(http://nexushost/content/groups/repo),它缓存所有外部maven存储库(maven central,grails repos)和我们的内部版本repo。

至于部署,我们有一个快照回购(http://nexushost/content/repositories/snapshots)和一个回收版本(http://nexushost/content/repositories/releases/)。

这是我们的BuildConfig与grails 2.5.1的摘录。它与你的版本应该没有什么不同:

def env = System.getenv() + new HashMap(System.properties)

grails {
    project {
        repos {
            SNAPSHOTS {
                url = "http://nexushost/content/repositories/snapshots"
                username = env.NEXUS_DEPLOY
                password = env.NEXUS_DEPLOY_PASS
            }
            RELEASES {
                url = "http://nexushost/content/repositories/releases/"
                username = env.NEXUS_DEPLOY
                password = env.NEXUS_DEPLOY_PASS
            }
        }
    }
}


grails.project.dependency.resolver = "maven" 
grails.project.dependency.resolution = {
    inherits("global") {
    }
    repositories {
        inherits true

        mavenLocal()
        mavenRepo('http://nexushost/content/groups/repo') {
            auth(
                    username: env.NEXUS_BUILD,
                    password: env.NEXUS_BUILD_PASS
            )
        }
        mavenRepo('http://nexushost/content/repositories/snapshots') {
            auth(
                    username: env.NEXUS_BUILD,
                    password: env.NEXUS_BUILD_PASS
            )
            updatePolicy 'always'
        }
    }

//....
}

答案 1 :(得分:0)

当您执行mvn deploy命令时,它会将您的项目作为jar上传到nexus存储库,但不会单独上传每个依赖项,如果您要下载并使用nexus中的项目依赖项,则需要将依赖项上传到也是关系。

有关如何将第三方jar上传到像nexus这样的存储库的更多信息 https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html

如果您使用nexus 2,也可以从ui。

执行此操作