【问题标题】:Ant: get Java class name and write to properties fileAnt:获取 Java 类名并写入属性文件
【发布时间】:2014-06-12 13:25:01
【问题描述】:

我想在 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.MyPluginActivator。以及它的包名,在本例中为 org.company.package

理想情况下,我希望使用 Ant 自动执行此操作,但对任何其他不需要预先安装的轻量级跨平台工具感到满意。

谢谢!

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

【问题讨论】:

    标签: java ant automation osgi bnd


    【解决方案1】:

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

    不管怎样,既然你似乎坚持要朝自己的脚开枪,你也可以这样做:

    Bundle-Activator: ${classes;implements;org.osgi.framework.BundleActivator}
    

    这似乎比做公认的答案容易得多,并且当实际上有多个实施者时至少会产生错误。

    无论如何,您还通过导出包含您的激活器的包来犯下另一项重大罪行(在 OSGi 世界中)。 OSGi 的整个想法是保持私有(你应该为此使用 Private-Package)。

    【讨论】:

    • 这个想法是让一个新的插件开发人员免受 osgi 的复杂性,这样他就可以在没有配置依赖项的情况下执行他的 java 魔法,然后运行一个简单的 ant 脚本来创建包。
    • 我会按照你的建议更新我的方法,并为我的罪孽赎罪!
    【解决方案2】:

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

    我觉得你错过了bnd文件的重点,这是你对bundle内容的描述。也就是说,它是一个你应该编写的源文件。

    另外,为什么要导出包含捆绑激活器的包?这个包在 OSGi 中应该是私有的。

    【讨论】:

      【解决方案3】:

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

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

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

      如果有任何进一步的说明,请告诉我。

      【讨论】:

        猜你喜欢
        • 2013-01-15
        • 1970-01-01
        • 2011-11-01
        • 2016-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多