Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Gradle OSGI插件扫描蓝图XML文件_Java_Gradle_Blueprint Osgi - Fatal编程技术网

Java 使用Gradle OSGI插件扫描蓝图XML文件

Java 使用Gradle OSGI插件扫描蓝图XML文件,java,gradle,blueprint-osgi,Java,Gradle,Blueprint Osgi,我正在研究将现有的OSGI/blueprint项目从Maven迁移到Gradle。在Maven中,Maven bundle插件会扫描上下文XML文件,以查找代码中可能没有的导入,但是我无法将其与Gradle OSGI插件一起使用 例如,BlueprintXML包含这样的导入 <reference id="exampleService" availability="mandatory" interface="com.adamish.test.Test" /> Import-Packa

我正在研究将现有的OSGI/blueprint项目从Maven迁移到Gradle。在Maven中,Maven bundle插件会扫描上下文XML文件,以查找代码中可能没有的导入,但是我无法将其与Gradle OSGI插件一起使用

例如,BlueprintXML包含这样的导入

<reference id="exampleService" availability="mandatory" interface="com.adamish.test.Test" />
Import-Package: com.adamish.test 
然后生成的MANFEST.MF将包含如下导入

<reference id="exampleService" availability="mandatory" interface="com.adamish.test.Test" />
Import-Package: com.adamish.test 
格拉德尔 但是,使用以下build.gradle文件不会为com.adamish.test生成带有导入包的MANIFEST.MF

apply plugin: 'osgi'

jar {
    manifest {
        instruction 'Bundle-Blueprint', 'OSGI-INF/blueprint/context.xml'
    }
}
分析 Maven和Gradle都使用BND,它似乎包含Bundle Blueprint指令,但是当通过Gradle调用时,它不会导致将导入添加到清单中


我已经在Gradle2.4和最新的2.10中对此进行了测试,maven bundle插件的蓝图解析功能是由maven bundle插件的类部分提供的,而不是BND。BND确实包含一些支持蓝图的代码,但这是

通过手动解析XML文件并构建Java包列表,我暂时解决了这个问题

def importPackages = new LinkedHashSet<String>();
fileTree(dir: 'src/main/resources/OSGI-INF/blueprint/', include: '*.xml').each {
   new XmlSlurper().parse(it).'**'.findAll { it.@availability == "mandatory" }.each {
      def iFace = it.@interface.text()
      importPackages.add(iFace.substring(0, iFace.lastIndexOf('.')))
   }
}

importPackages.add('com.adamish.foo')

jar {
    manifest {
        instruction 'Import-Package', importPackages.join(',')
    }
}
def importPackages=new LinkedHashSet();
文件树(目录:“src/main/resources/OSGI-INF/blueprint/”,包括:“*.xml”)。每个{
新建XmlSlurper().parse(it)。'**'.findAll{it.@availability==“mandatory”}。每个{
def iFace=it@interface.text()
importPackages.add(iFace.substring(0,iFace.lastIndexOf('.'))
}
}
importPackages.add('com.adamish.foo')
罐子{
显示{
说明“导入包”,导入包。连接(','))
}
}

如果我是你,我会使用LinkedHashSet,这样,
importPackages.join(',')
不是修改jar步骤,而是选择在源代码
bnd.bnd
中明确提到包:
导入包:${project.ext.blueprintInterfaces}
返回importBlueprintPackages.join(','))
从您的函数中。然后,我必须添加一个
任务loadBlueprintClasses{project.ext.blueprintInterfaces=processBlueprintInterfaces()}
Nice one!