Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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/ant/2.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
Ant:获取Java类名并写入属性文件_Java_Ant_Automation_Osgi_Bnd - Fatal编程技术网

Ant:获取Java类名并写入属性文件

Ant:获取Java类名并写入属性文件,java,ant,automation,osgi,bnd,Java,Ant,Automation,Osgi,Bnd,我想在bnd工具的帮助下自动创建OSGi清单。为此,我需要创建一个properties.bnd文件,其中包含以下两行内容: Bundle-Activator=org.company.package.MyPluginActivator Export-Package=org.mycompany.package #or possibly multiple packages here 我的自动化脚本需要找到一个实现BundleActivator接口的java类,在本例中是org.company.pac

我想在bnd工具的帮助下自动创建OSGi清单。为此,我需要创建一个properties.bnd文件,其中包含以下两行内容:

Bundle-Activator=org.company.package.MyPluginActivator
Export-Package=org.mycompany.package #or possibly multiple packages here
我的自动化脚本需要找到一个实现
BundleActivator
接口的java类,在本例中是
org.company.package.mypluginator
。以及它的包名,在本例中是
org.company.package

理想情况下,我希望使用Ant实现这一点的自动化,但对于任何其他不需要以前安装的轻量级和跨平台工具,我都很满意

谢谢


PS:我知道Ant属性和PropertyFile任务,但不知道如何获取所需java类的名称。

使用反射,您可以编写一个程序来获取实现所需接口的类名

使用调用该java程序。(我建议使用单独的JVM来运行此任务,您可以在提供的链接上找到设置)

在第一步中编写的程序也可用于将值写入属性文件,因此不需要执行属性任务


让我知道任何进一步的澄清。

如果捆绑包中有多个
BundleActivator
实现该怎么办??你真的对一个工具很满意吗?基本上是随机决定哪一个将是你包的主要入口点

我觉得您忽略了bnd文件的要点,即您对捆绑包内容的描述。也就是说,它是您应该编写的源文件


另外,为什么要导出包含bundle activator的包?这个包在OSGi中应该是私有的。

问题在于,正如Neil所指出的,可以有多个类实现BundleActivator。这是从现在起6周内浪费几个小时找出代码停止工作的原因的好方法之一

无论如何,既然你似乎坚持要开枪打自己的脚,你也可以这样做:

Bundle-Activator: ${classes;implements;org.osgi.framework.BundleActivator}
这似乎比执行公认的答案要容易得多,而且当实际上有多个实现者时,至少会产生一个错误


无论如何,通过导出包含激活器的包,您还犯下了另一个致命的错误(在OSGi世界中)。OSGi的整个想法是将内容保持私有(为此,您应该使用私有包).

这个想法是为了让一个新的插件开发人员免受osgi的复杂影响,这样他就可以在不配置依赖项的情况下执行java魔术,然后运行一个简单的ant脚本来创建捆绑包。我将根据你的建议更新我的方法,并弥补我的过失!