Как сгенерировать jar (скажем, output.jar), используя ant + bnd, чтобы в output.jar были встроены jar пути к классам, которые динамически объявляются в ant? - PullRequest
0 голосов
/ 16 октября 2019

Я строю ant-скрипт, где использую bnd task для генерации output.jar. перед заданием bnd я создал / скопировал несколько jar (a.jar, b.jar и т. д.). Теперь я хотел бы вставить / включить эти jar-файлы в папку lib файла output.jar.

   output.jar---|
                lib----|
                      a.jar
                      b.jar
                META-INF---|
                          MANIFEST.MF

Кроме того, я хотел бы передать jar-файлы classpath (ieajar и т. Д.) В виде динамически сгенерированного абсолютного пути изСкрипт муравья, а не какой-либо относительный / жестко заданный путь внутри bnd файла

Но сделать это невозможно. Банки с classpath устанавливаются как разнесенные каталоги внутри output.jar

   output.jar ---|
                 com
                 sun
                 META-INF---|
                           MANIFEST.MF

Я использовал аргумент classpath в задаче bnd для передачи jar classpath. Также добавлен include-ресурс в bnd файл для этих jar-файлов.

ant file

    <taskdef resource="aQute/bnd/ant/taskdef.properties" 
     classpath="${build.jar}/biz.aQute.bnd.jar"/>

<path id="bnd.classpath">
        <fileset dir="${build.jar}/">
    <include name="a.jar" />
    <include name="b.jar" />
    <include name="c.jar" />
    </fileset>
    </path>

<pathconvert property="bnd.classpath.string" pathsep=",">
    <path refid="bnd.classpath" />
       <mapper>
            <chainedmapper>
          <flattenmapper/>
          <regexpmapper from="(.*)" 
                       to="${build.jar}/\1" casesensitive="no"/>
             </chainedmapper>
       </mapper>
</pathconvert>
<echo>${bnd.classpath.string}</echo>

<bnd  
        failok="false" 
    eclipse="false"
    exceptions="true" 
        output="${dist.internal.res}/output.jar"
    files="${resources}/cc.bnd"/>

cc.bnd

   Bundle-SymbolicName: output.plugin
   ver: 6.0.3
   Bundle-Version: ${ver}
   Bundle-Description: plugin jar
   Export-Package: *
   Import-Package: *
   Private-Package: *

Я также пытался использовать

  -includeresource: \
     @${abc}/lib/a.jar,\

, но

1) По-прежнему получать разнесенные каталоги вместо встроенных jar-файлов 2) Как передать абсолютные каталоги (то есть $ {abc}), пропущенные через скрипт ant

...