当前位置: 首页 > 知识库问答 >
问题:

从Gradle创建正确的Maven依赖项

司徒炎彬
2023-03-14

我面临的第一个问题是提供的依赖关系,该依赖关系总是作为运行时写入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
}

共有1个答案

严正诚
2023-03-14

我遇到了一些麻烦,很多例子只是比较了[...]

it.groupid不是字符串。您需要类似于it.groupid.value()it.groupid[0].value()的内容。

我是否可以将依赖关系管理的功能提取到一个更广泛的系统范围的脚本中,该脚本可以从所有其他需要这种依赖关系管理的项目中重用?怎么做?

在compileJava期间,我得到警告:compilejavawarning:[options]bootstrap class path not set in with-source1.7这是什么意思,我如何修复它。

这个问题已经问过很多次了,也回答过很多次了。请参阅Stack Overflow或http://forums.gradle.org。

PS:与其将Ivy改写为Maven版本范围语法,不如从一开始(即在构建脚本中)就使用Maven语法。

 类似资料:
  • 我的gradle项目(“osgiapp”)依赖于一个OSGI项目(“osgidep”),该项目具有以下MANIFEST.MF条目: 这里导出了两个包: test.lib包由osgidep.jar中包含的lib/lib.jar提供 test.osgidep包由osgidep.jar本身提供 现在,我的建筑。Gradle看起来是这样的: 当我试图构建使用两个导出包的代码时:

  • 问题内容: 这就是在Android Studio中导入依赖项的方式。在这种情况下,okhttp: 我想导入我自己创建的依赖项。例如: 在这一点上,如果我学习如何创建依赖关系并在Android Studio项目中导入就足够了。 但是如果可能的话,我想将我的库托管在git(github)仓库中。太棒了 问题答案: 要实现它,您可以通过以下几种方法: 在中央Maven或Jcenter中发布您的库(工件)

  • 我在构建项目时收到以下错误: 据我所知,这是因为我有多个依赖于slf4j的库。我的构建中的依赖项。gradle文件是: 我知道logback-android-经典依赖是个问题,因为它确实依赖于slf4j,如果我把它注释掉,我的项目构建很好。根据其他消息来源,我发现这通常通过排除传递依赖来解决,如下所示: 然而,即使在我清理和重建后,我仍然得到了错误。 更新:运行dependencyInsight查

  • 问题内容: 我需要导入课程。包含在Maven项目中的正确依赖项是什么?我正在尝试,但是没有运气(这是pom,而不是jar)。 ps。到目前为止,我发现的唯一解决方法是:(来自Maven Central)。 问题答案: 在ActiveMQ以及Qpid JMS等其他项目中,我们从Apache Geronimo JAR引入了JMS规范类,在此依赖项中提供了1.1 API: 对于JMS 2 API,您需要

  • 我试图将我们的Android应用程序转换为gradle构建。我有这个项目,它的图书馆建设成功。我现在试图为我们的各种环境创建单独的apks(dev/test/prod对他们使用的restful服务有不同的网址)。 在四处搜索时,我觉得最好的方法是为每个环境制作不同的BuildConfig。这就是我所尝试的: 问题是,我的BuildConfig.java似乎没有注入静态变量,因此我得到类似于以下错误

  • 项目中./gradlew build命令产生的jar包没有将build.gradle.kts中的dependencies的依赖包打进去,使用包时提示Package 'xxx.x' is not found ,如何解决呢? 希望:如何解决这个Package 'xxx.x' is not found问题,以及如何指定打的jar包的名称和版本