2011-11-17 47 views
3

我正在尝试使用Ant bndwrap任务将非OSGi罐子包装到目录中。这个我现在的Ant的配置是:BND Ant任务 - 包装非OSGi罐子

<target name="wrap-jars" description="Wrap non-OSGi jars"> 
    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${biz.aQute:bnd:jar}"/> 
    <bndwrap output="${dist.dir}/app-modules"> 
     <fileset dir="${dist.dir}/app-modules" includes="*.jar" /> 
    </bndwrap> 
    <move overwrite="true" todir="${dist.dir}/app-modules" > 
     <fileset dir="${dist.dir}/app-modules" includes="*.bar" /> 
     <mapper type="glob" from="*.bar" to="*.jar" /> 
    </move> 
</target> 

这工作得很好,但问题是,它也包装现有的OSGi罐子,这会导致问题。例如,我注意到它将Bundle-SymbolicName标题更改为某个默认值。它可能会改变别的东西,我不想要。我只希望它能够在没有OSGi信息的罐子上运行。

有什么方法可以告诉BND忽略清单中现有的OSGi头文件,或完整的已经OSGi-fied的jar文件吗?

回答

0

我会将非OSGi jar存储在单独的文件夹中,并修改fileset以仅处理该文件夹。

+0

嗯,这是一个想法,但它会在另一条战线的事情复杂化。在我的项目中,包装是自动完成的,我无法区分哪些罐子符合OSGi标准。我正在考虑使用BND定义文件,但我不知道如何去做。 – vdjurovic

+0

也许你可以修改bnd的源代码并使用自定义的bnd分支。 Ant任务通常不会太复杂。 – palacsint

+0

我实际上是从Maven调用这个任务,所以我宁愿使用股票BND。但是,我可能能够从任务源代码中找出一些东西。 – vdjurovic

0

我注意到,在重新包装OSGi jar时,最近的bnd版本(例如2.1.0)现在可以遵守Bundle-SymbolicName。

-1

只是改变你的文件集排除罐子

+2

嗨!欢迎来到Stack Overflow。这个答案有点稀疏 - 你可以用一个例子来解释一下OP的问题吗?谢谢! –