gradle将-source.jar添加到war
我正在将许多项目从ant+ivy转换为Gradle 其中一个项目(gradle将-source.jar添加到war,gradle,ivy,Gradle,Ivy,我正在将许多项目从ant+ivy转换为Gradle 其中一个项目(address)生成一个简单的jar,用于包含到webapp中。我已经设置build.gradle将jar和sources jar发布到我的私有常春藤存储库中 address/build.gradle摘录: apply plugin: 'java' apply plugin: 'publishing' apply plugin: 'ivy-publish' [...snip...] task sourceJar(type: J
address
)生成一个简单的jar,用于包含到webapp中。我已经设置build.gradle将jar和sources 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
时,war的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->default"/>
<dependency org="org.springframework" name="spring-beans" rev="3.0.5.RELEASE" conf="runtime->default"/>
<dependency org="org.springframework" name="spring-context" rev="3.0.5.RELEASE" conf="runtime->default"/>
<dependency org="org.springframework" name="spring-expression" rev="3.0.5.RELEASE" conf="runtime->default"/>
<dependency org="org.springframework" name="spring-core" rev="3.0.5.RELEASE" conf="runtime->default"/>
<dependency org="log4j" name="log4j" rev="1.2.14" conf="runtime->default"/>
<dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.5.6" conf="runtime->default"/>
<dependency org="org.slf4j" name="slf4j-log4j12" rev="1.5.6" conf="runtime->default"/>
<dependency org="commons-lang" name="commons-lang" rev="2.4" conf="runtime->default"/>
<dependency org="org.slf4j" name="slf4j-api" rev="1.5.6" conf="runtime->default"/>
</dependencies>
</ivy-module>
我认为原因是源工件也在运行时配置中发布,如果您使用特殊配置(例如源),它应该可以工作:
publications {
ivyJava(IvyPublication) {
from components.java
configurations.create('sources')
artifact(sourceJar) {
conf "sources"
}
}
}
(configurations.create()
是必需的,因为
)