Thank you JB,

I have made the changes you suggested, but the behavior is very strange; the 
first time I run, I get this error:

java.lang.ArrayIndexOutOfBoundsException: 19
        at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:576)
        at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:494)
        at aQute.bnd.osgi.Clazz.parseClassFileWithCollector(Clazz.java:483)
        at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:473)
        at aQute.bnd.osgi.Analyzer.analyzeJar(Analyzer.java:2177)
        at aQute.bnd.osgi.Analyzer.analyzeBundleClasspath(Analyzer.java:2083)
        at aQute.bnd.osgi.Analyzer.analyze(Analyzer.java:138)
        at aQute.bnd.osgi.Analyzer.calcManifest(Analyzer.java:616)
        at org.ops4j.pax.swissbox.bnd.BndUtils.createBundle(BndUtils.java:161)
        at 
org.ops4j.pax.url.wrap.internal.Connection.getInputStream(Connection.java:83)
        at java.net.URL.openStream(URL.java:1045)
        at 
org.apache.karaf.features.internal.download.impl.SimpleDownloadTask.download(SimpleDownloadTask.java:78)
        at 
org.apache.karaf.features.internal.download.impl.AbstractRetryableDownloadTask.run(AbstractRetryableDownloadTask.java:60)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
java.lang.ArrayIndexOutOfBoundsException: 19
        at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:576)
        at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:494)
        at aQute.bnd.osgi.Clazz.parseClassFileWithCollector(Clazz.java:483)
        at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:473)
        at aQute.bnd.osgi.Analyzer.analyzeJar(Analyzer.java:2177)
        at aQute.bnd.osgi.Analyzer.analyzeBundleClasspath(Analyzer.java:2083)
        at aQute.bnd.osgi.Analyzer.analyze(Analyzer.java:138)
        at aQute.bnd.osgi.Analyzer.calcManifest(Analyzer.java:616)
        at org.ops4j.pax.swissbox.bnd.BndUtils.createBundle(BndUtils.java:161)
        at 
org.ops4j.pax.url.wrap.internal.Connection.getInputStream(Connection.java:83)
        at java.net.URL.openStream(URL.java:1045)
        at 
org.apache.karaf.features.internal.download.impl.SimpleDownloadTask.download(SimpleDownloadTask.java:78)
        at 
org.apache.karaf.features.internal.download.impl.AbstractRetryableDownloadTask.run(AbstractRetryableDownloadTask.java:60)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

Followed by multiple errors of the kind:

Uses constraint violation. Unable to resolve resource XXXX.  because it is 
exposed to package 'javax.xml.bind' from resources jakarta.xml.bind-api 
[jakarta.xml.bind-api [52](R 52.0)] and org.apache.felix.framework 
[org.apache.felix.framework [0](R 0)] via two dependency chains.


However, after I exit Karaf and run it again, the errors disappear, and the 
bundles in the conditional are not deployed as expected.
All of the above happens when  building the code with Java 13 (although passing 
—release 1.8 to the compiler).

I wonder, is the condition evaluated at build time or at runtime?

Now, when I compile with Java 8,  I still get the Index out of bound errors 
from BND the first time it runs, but not the uses constraints violation errors.


Best regards,
Alex soto




> On Feb 27, 2020, at 9:46 AM, Jean-Baptiste Onofre <j...@nanthrax.net> wrote:
> 
> Hi Alex,
> 
> Can you try this condition:
> 
> <condition>req:osgi.ee;filter:="(&amp;(osgi.ee=JavaSE)(!(version>=1.8)))"</condition>
> 
> And also remove the dependency flag.
> 
> Regards
> JB
> 
>> Le 27 févr. 2020 à 15:42, Alex Soto <alex.s...@envieta.com 
>> <mailto:alex.s...@envieta.com>> a écrit :
>> 
>> Perhaps I am still doing something wrong, or not understanding how the 
>> condition works.
>> I have this in my features.xml:
>> 
>> 
>>              <conditional>
>>                      <!-- From Java 9 and up add JaveEE dependencies -->
>>                      
>> <condition>req:osgi.ee;filter:="(&amp;(osgi.ee=JavaSE)(version>=9))"</condition>
>> 
>>                      <bundle 
>> dependency="true">mvn:jakarta.xml.bind/jakarta.xml.bind-api/${jaxb.version}</bundle>
>>                      <bundle 
>> dependency="true">mvn:com.sun.activation/javax.activation/1.2.0</bundle>
>>                      <bundle 
>> dependency="true">wrap:mvn:org.glassfish.jaxb/txw2/${jaxb.version}</bundle>
>>                      <bundle 
>> dependency="true">mvn:com.sun.istack/istack-commons-runtime/3.0.8</bundle>
>>                      <bundle 
>> dependency="true">mvn:org.jvnet.staxex/stax-ex/1.8.1</bundle>
>>                      <bundle 
>> dependency="true">mvn:com.sun.xml.fastinfoset/FastInfoset/1.2.16</bundle>
>>                      <bundle 
>> dependency="true">wrap:mvn:org.glassfish.jaxb/jaxb-runtime/${jaxb.version}</bundle>
>>              </conditional>
>> 
>> 
>> But when I run on Java 8, the above bundles are deployed, but my intention 
>> is the opposite. 
>> Of course this causes a lot of errors. Please help.
>> 
>> Best regards,
>> Alex soto
>> 
>> 
>> 
>> 
>>> On Feb 26, 2020, at 4:21 PM, Jean-Baptiste Onofré <j...@nanthrax.net 
>>> <mailto:j...@nanthrax.net>> wrote:
>>> 
>>> Thanks Guillaume, it?s what I was looking for. 
>>> 
>>> Regards 
>>> JB
>>> 
>>> Le mer. 26 f?vr. 2020 ? 21:31, Guillaume Nodet <gno...@apache.org 
>>> <mailto:gno...@apache.org>> a ?crit :
>>> This should be doable using something like in the test 
>>> https://github.com/apache/karaf/blob/master/features/core/src/test/resources/org/apache/karaf/features/internal/service/f06.xml#L30-L33
>>>  
>>> <https://github.com/apache/karaf/blob/master/features/core/src/test/resources/org/apache/karaf/features/internal/service/f06.xml#L30-L33>
>>> Le mer. 26 f?vr. 2020 ? 19:53, Alex Soto <alex.s...@envieta.com 
>>> <mailto:alex.s...@envieta.com>> a ?crit :
>>> In Features XML, is it possible to add a bundle conditionally based on JDK 
>>> version?
>>> 
>>> <conditional>
>>>     <condition>???</condition>
>>> </conditonal>
>>> 
>>> BTW, I could not find documentation about what can be put in the condition 
>>> tag.
>>> I looked here https://karaf.apache.org/manual/latest/provisioning 
>>> <https://karaf.apache.org/manual/latest/provisioning> but there is no 
>>> mention of this.
>>> 
>>> Best regards,
>>> Alex soto
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> ------------------------
>>> Guillaume Nodet
>>> 
>> 
> 

Reply via email to