经过几个小时的搜索和研究后,我想出了一个工作示例,用于在使用Gradle 1.11和maven-publish插件时将正确的Maven依赖项写入生成的pom.xml。
我遇到的第一个问题是提供的依赖项总是作为运行时写入pom.xml
第二个问题是动态版本,我用于次要版本更改。 Maven和Gradle有不同的符号,maven-publish只是将Gradle类型的符号写入pom.xml
以下是我的例子:
apply plugin: 'java'
apply plugin: 'maven-publish'
group = 'de.pentos'
version = '0.4.4'
sourceCompatibility = 1.7
repositories {
mavenCentral()
mavenLocal()
}
configurations {
provided
compile.extendsFrom provided
}
dependencies {
provided("org.projectlombok:lombok:1.+")
provided("javax.servlet:javax.servlet-api:3.1.0")
compile("org.slf4j:slf4j-api:1.7+")
compile("com.fasterxml.jackson.core:jackson-databind:2.3.+")
compile("joda-time:joda-time:2.3+")
compile("org.springframework:spring-webmvc:3.2+")
compile("org.springframework.security:spring-security-web:3.1+")
testCompile("junit:junit:4.11")
}
jar { baseName = "${project.group}.${project.name}" }
publishing {
publications {
jar(MavenPublication) {
from components.java
artifactId "${project.name}"
artifact sourceJar { classifier "sources" }
pom.withXml {
final Node root = asNode()
final versionPattern = ~/(?:(.+)\.)?(.+?)\.?\+/
configurations.compile.allDependencies.each {
final name = it.name
final group = it.group
final m = versionPattern.matcher(it.version)
if (m.matches()) {
final base = m[0][1]
final rest = m[0][2].toInteger()
final version = '[' + (base ? base + '.' : '') + (rest) + ',' + (base ? base + '.' : '') + (rest + 1) + ')'
root.dependencies.first().findAll{
it.groupId.first().value()[0] == group && it.artifactId.first().value()[0] == name
}.each {
it.version.first().value = version
}
}
}
configurations.provided.allDependencies.each {
final name = it.name
final group = it.group
root.dependencies.first().findAll{
it.groupId.first().value()[0] == group && it.artifactId.first().value()[0] == name
}.each {
it.scope.first().value = 'provided'
}
}
}
}
}
}
tasks.withType(Compile) { options.encoding = 'UTF-8' }
task sourceJar(type: Jar) {
classifier = 'sources'
from sourceSets.main.allSource
}
那我的问题是什么?
我在一些简单比较的例子中遇到了一些麻烦
..findAll {
it.groupId == group
}
这对我来说没有用,我必须通过大量测试找出如何让findAll
工作。
我的版本是详细的吗?可以用更少的代码编写吗?
我是否可以将依赖关系管理功能提取到更全系统的脚本中,该脚本可以从需要此依赖关系管理的所有其他项目中重用?怎么样?
在compileJava期间,我收到警告:compileJavawarning: [options] bootstrap class path not set in conjunction with -source 1.7
这是什么意思,我该如何解决这个问题。
答案 0 :(得分:0)
我在一些简单比较[...]
的例子中遇到了一些麻烦
it.groupId
不是字符串。您需要it.groupId.value()
或it.groupId[0].value()
之类的内容。
我是否可以将依赖关系管理功能提取到更全系统的脚本中,该脚本可以从需要此依赖关系管理的所有其他项目中重用?怎么样?
您可以编写一个插件类,并将其作为Jar发送到build。有关详细信息,请参阅Gradle User Guide。
在compileJava期间,我收到警告:compileJavawarning:[options] bootstrap类路径未与-source 1.7一起设置 这是什么意思,我该如何解决这个问题。
这个问题已经被多次询问和回答。请参阅Stack Overflow或http://forums.gradle.org。
PS:不应该将Ivy重写为Maven版本范围语法,而应该可以从一开始就使用Maven语法(即在构建脚本中)。