【问题标题】:gradle adding -source.jar to wargradle 将 -source.jar 添加到战争
【发布时间】:2014-12-24 02:35:15
【问题描述】:

我正在将一些项目从 ant+ivy 转换为 Gradle。

其中一个项目 (address) 生成了一个简单的 jar,用于包含在 web 应用程序中。我已设置 build.gradle 将 jar 和源 jar 发布到我的私人常春藤存储库。

address/build.gradle摘录:

apply plugin: 'java'
apply plugin: 'publishing'
apply plugin: 'ivy-publish'

[...snip...]

task sourceJar(type: Jar) {
    from sourceSets.main.java
    classifier "source"
}

publishing {
    repositories {
        ivy {
            url 'http://dev.example.com/ivy/'
            layout "pattern", {
                artifact "[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"
            }
        }
    }
    publications {
        ivy(IvyPublication) {
            from components.java
            artifact(sourceJar) {
                type "source"
            }
        }
    }
}

我使用gradlew publish 发布此内容。然后我的 webapp 依赖于生成的 jar:

compile 'com.example:address:1.0.0'

我遇到的问题是,当我在 webapp 上执行 gradlew build 时,战争的 WEB-INF/lib 包括 address-source-1.0.0.jar 以及预期的 address-1.0.0.jar

我无法弄清楚为什么源 jar 会被包含在战争中。它没有出现在 gradlew dependencies 中。

这是为 jar 生成的 ivy.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven">
  <info organisation="com.example" module="address" revision="1.0.0" status="integration" publication="20141027154452"/>
  <configurations>
    <conf name="default" visibility="public" extends="runtime"/>
    <conf name="runtime" visibility="public"/>
  </configurations>
  <publications>
    <artifact name="address" type="jar" ext="jar" conf="runtime"/>
    <artifact name="address" type="source" ext="jar" conf="runtime" m:classifier="source"/>
  </publications>
  <dependencies>
    <dependency org="org.springframework" name="spring-asm" rev="3.0.5.RELEASE" conf="runtime-&gt;default"/>
    <dependency org="org.springframework" name="spring-beans" rev="3.0.5.RELEASE" conf="runtime-&gt;default"/>
    <dependency org="org.springframework" name="spring-context" rev="3.0.5.RELEASE" conf="runtime-&gt;default"/>
    <dependency org="org.springframework" name="spring-expression" rev="3.0.5.RELEASE" conf="runtime-&gt;default"/>
    <dependency org="org.springframework" name="spring-core" rev="3.0.5.RELEASE" conf="runtime-&gt;default"/>
    <dependency org="log4j" name="log4j" rev="1.2.14" conf="runtime-&gt;default"/>
    <dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.5.6" conf="runtime-&gt;default"/>
    <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.5.6" conf="runtime-&gt;default"/>
    <dependency org="commons-lang" name="commons-lang" rev="2.4" conf="runtime-&gt;default"/>
    <dependency org="org.slf4j" name="slf4j-api" rev="1.5.6" conf="runtime-&gt;default"/>
  </dependencies>
</ivy-module>

【问题讨论】:

    标签: gradle ivy


    【解决方案1】:

    我认为原因是源工件也在 runtime 配置中发布,如果您使用特殊配置(例如 sources)它应该可以工作:

    publications {
      ivyJava(IvyPublication) {
        from components.java
        configurations.create('sources')
        artifact(sourceJar) {
          conf "sources"
        }
      }
    }
    

    (configurations.create() 是必需的,因为 GRADLE-3162)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      相关资源
      最近更新 更多