首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将工件运行时作用域更改为编译作用域?

如何将工件运行时作用域更改为编译作用域?
EN

Stack Overflow用户
提问于 2015-06-26 09:31:28
回答 2查看 1.4K关注 0票数 1

我正在做一个项目,它使用gradle和jfrog插件来发布到工件。重要的代码片段如下:

代码语言:javascript
复制
plugins {
   id "java"
   id "idea"
   id "groovy"
   id "pmd"
   id "findbugs"
   id "maven-publish"
   id "com.jfrog.artifactory" version "3.1.1"
}

dependencies {
   compile 'com.google.guava:guava:18.0'
   compile 'com.mashape.unirest:unirest-java:1.4.5'
   compile 'log4j:log4j:1.2.14'
}

artifactory {
   contextUrl = "https://SOME_SERVER/artifactory"
   publish {
      repository {
           repoKey = 'libs-snapshot-local'
           username = artifactory_username
           password = artifactory_password
           maven = true
      }
      defaults {
           publications ('mavenJava')
      }
   }
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}

当我做一个分级artifactoryPublish时,一切似乎都很好。这些人工制品被发布,并生成一个pom文件。

遗憾的是,pom文件中的依赖项都有一个运行时作用域:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.whatsoever</groupId>
  <artifactId>some-app</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>18.0</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>com.mashape.unirest</groupId>
      <artifactId>unirest-java</artifactId>
      <version>1.4.5</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.14</version>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
</project>

而不是这个运行时作用域,它们应该有一个编译作用域。我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-01 13:38:35

从未在实践中尝试过这种方法,但是您可以尝试使用publication.pom.withXml配置块在生成的pom中引入更改:

代码语言:javascript
复制
publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java

            pom.withXml {
                asNode().dependencies.'*'.findAll() {
                    it.scope.text() == 'runtime' && project.configurations.compile.allDependencies.find { dep ->
                        dep.name == it.artifactId.text()
                    }
                }.each() {
                    it.scope*.value = 'compile'
                }
            }
        }
    }
}

另外,这也是新发布插件的一个已知限制,我在这条线中找到了解决方案。

票数 4
EN

Stack Overflow用户

发布于 2022-09-02 12:03:45

时至今日。如果您在7.x之后使用Gradle版本,如果要公开您的依赖项,建议使用api关键字而不是compile

但是api函数是由Gradle插件java-library提供的。

因此,设置文件build.gradle如下所示:

代码语言:javascript
复制
plugins {
   id "java"
   id "java-library"
   id "idea"
   id "groovy"
   id "pmd"
   id "findbugs"
   id "maven-publish"
   id "com.jfrog.artifactory" version "3.1.1"
}

dependencies {
   api 'com.google.guava:guava:18.0'
   api 'com.mashape.unirest:unirest-java:1.4.5'
   api 'log4j:log4j:1.2.14'
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
        // Something else...
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31069666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档