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

使用gradle实现第一个OSGi构建-从ant迁移到gradle

后学
2023-03-14

是否有明确的第一个http://wiki.osgi.org/wiki/tooling_processes gradle插件用于OSGi?或者怎么和Gradle一起做?

OSGi容器有一个很大的老项目,许多项目在MANIFEST.MF中声明了复杂的关系。建筑很长。现在我们想把事情简化,采用Gradle。但首先,在不破坏东西的情况下,保持ant和gradle构建并行一段时间。然而,我看到的是gradle建议在build.gradle定义MANIFEST。https://docs.gradle.org/current/userguide/osgi_plugin.html
,这会造成大量的复制工作。

更新有近100个模块,模块之间和嵌套JAR之间有大量的依赖信息。MANIFEST.MF的平均长度约为50行(从20行到300行不等)。如何捆绑嵌套的jar是另一个问题。这个问题是关于使用现有的MANIFEST.MF文件。我看到的所有插件都使用bnd,这与manifest first方法完全相反。

共有1个答案

商和颂
2023-03-14

Gradle有一个osgimanifest类,它是一个扩展的jar清单:

https://docs.gradle.org/current/javadoc/org/gradle/api/plugins/osgi/osgimanifest.html

StackOverflow上有一篇文章显示了类似的用法:

apply plugin: 'java'
apply plugin: 'osgi'

jar {
    baseName = 'awesome'
    manifest {
        name = 'An Awesome Application'
        symbolicName = 'com.example.awesome'
        instruction 'Import-Package', 'org.springframework.orm', '*'
    }
}
jar {
    manifest {
        def manif = "${resourcesDir}/MANIFEST.MF"
        if (new File(manif).exists()) {
            from file(manif)
        }
        else{
            name = 'overwrittenSpecialOsgiName'
            instruction 'Private-Package', 'org.mycomp.somepackage'
            instruction 'Bundle-Vendor', 'MyCompany'
            instruction 'Bundle-Description', 'Platform2: Metrics' 
        }
    }
}

Gradle清单的文档可以在这里找到:https://docs.gradle.org/current/javadoc/org/gradle/api/java/archives/manifest.html

对于你的“另一个问题”:

还有额外的Gradle插件用于构建OSGI包,在某些情况下,包括来自其他OSGI包的依赖项。

jar {
    manifest {
        attributes 'Implementation-Title': 'Bundle Quickstart',     // Will be added to manifest
                     'Import-Package': '*'  // Will be overwritten by the instuctions below
    }
}

bundle {
    includeTransitiveDependencies = true

    instructions << [
        'Bundle-Activator': 'foo.bar.MyBundleActivator',
        'Import-Package': 'foo.*',
        '-sources': true
    ]

    instruction 'Export-Package', '*' // Specify an individual instruction
    instruction '-wab', ''
}
dependencies {
    // all your usual dependencies
    ...

    osgiRuntime( "your:dependency:1.0" ) {
        transitive = false // transitive dependencies not included in OSGi runtime
    }
}
 类似资料:
  • 问题内容: 我正在尝试从构建过程的build.gradle脚本asp艺术中运行Java类的静态main方法。我正在将Android Studio 1.0.2与Android / Gradle插件’com.android.tools.build:gradle:1.0.0’结合使用 我要在构建期间运行其主要方法的Java类位于… \ trunk-gradle \ myproject \ src \ m

  • 所以现在当我通过命令行(windows)运行以下命令时: 我得到以下错误消息: 错误:找不到或加载主类DE.MyApp.Gradle.ConfigureCustomer null 在SourceSet容器上找不到属性“main 所以“sourcesets.main.runtimeClasspath”显然不存在于Android Studio的Gradle中。也许名字不一样。虽然我也尝试过这样设置类路

  • 我正在将我们的构建从Ant转换为Gradle。我们的第一步是添加Gradle构建文件,这样我们就可以开始使用Gradle作为构建工具。这让我们可以使用现有的构建脚本使用Ant进行构建,并将其转换为随时间推移的渐变。我只想让Gradle调用现有的Ant构建文件。我们的项目都是NetBeans项目,都有build.xml和nbproject/build-implt.xml文件。有些项目需要NetBea

  • 问题内容: 我在Groovy中有一个正在工作的小应用程序。目前,我可以在命令行上对其进行测试,但是我需要将其与Jenkins服务器集成。因此,我考虑过将其与Gradle集成在一起,以Jenkins可以读取的标准格式生成测试输出。(请考虑一下,我是Groovy,Gradle,Jenkins和JVM环境的新手)。 目前,我所有的测试都位于一个扩展的类中。我可以用一些bash脚本来运行它 在此布局中,有

  • 导入一个Ant构建 你可以在你的gradle项目中通过ant.importBuild()来导入一个ant构建,当你导入了一个ant构建,每一个ant target都会被视为一个Gradle任务.这意味着你可以像操作,执行gradle任务一样操作,执行ant target 例 16.8.导入ant构建 build.gradle ant.importBuild 'build.xml' build.xm

  • Gradle 提供了对 Ant 的优秀集成。可以在你的 Gradle 构建中,使用单独的 Ant 任务或整个 Ant 构建。事实上,你会发现在 Gradle 中使用 Ant 任务比使用 Ant 的 XML 格式更容易也更强大。你甚至可以只把 Gradle 当作一个强大的 Ant 任务脚本的工具。 Ant 可以分为两层。第一层是 Ant 的语言。它提供了用于 build.xml,处理的目标,特殊的构