Skip to content

Commit a5f47cd

Browse files
Merge pull request #1494 from matthiasblaesing/pr-1492
Add 'uses' information to OSGI metadata in MANIFEST.MF
2 parents 780facd + 1af6eb1 commit a5f47cd

File tree

5 files changed

+140
-16
lines changed

5 files changed

+140
-16
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Features
1414
* [#1482](https://github.com/java-native-access/jna/pull/1482): Add multilingual support of `Kernel32Util.formatMessage` - [@overpathz](https://github.com/overpathz).
1515
* [#1490](https://github.com/java-native-access/jna/pull/1490): Adds support for a custom `SymbolProvider` in `NativeLibrary` & `Library` - [@soywiz](https://github.com/soywiz).
1616
* [#1491](https://github.com/java-native-access/jna/pull/1491): Update libffi to v3.4.4 - [@matthiasblaesing](https://github.com/matthiasblaesing).
17+
* [#1487](https://github.com/java-native-access/jna/issues/1487): Add 'uses' information to OSGI metadata in MANIFEST.MF to improve stability of package resolution - [@sratz](https://github.com/sratz).
1718

1819
Bug Fixes
1920
---------

build.xml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
</or>
7474
</condition>
7575
<property name="jna.version" value="${jna.major}.${jna.minor}.${jna.revision}${version.suffix}"/>
76+
<property name="osgi.version" value="${jna.major}.${jna.minor}.${jna.revision}"/>
7677
<!-- jnidispatch library release version -->
7778
<property name="jni.major" value="6"/>
7879
<property name="jni.minor" value="1"/>
@@ -470,7 +471,17 @@
470471
<attribute name="Bundle-RequiredExecutionEnvironment" value="JavaSE-1.6"/>
471472
<attribute name="Bundle-Vendor" value="${vendor}"/>
472473
<attribute name="Bundle-ActivationPolicy" value="lazy"/>
473-
<attribute name="Export-Package" value="com.sun.jna;version=${jna.major}.${jna.minor}.${jna.revision}, com.sun.jna.ptr;version=${jna.major}.${jna.minor}.${jna.revision}, com.sun.jna.win32;version=${jna.major}.${jna.minor}.${jna.revision}"/>
474+
<!--
475+
The full "Export-Package" statement can be generated by invoking
476+
create-export-package-metadata-pom.sh in the main folder. This is
477+
necessary if the exported packages change. Then the list in the
478+
shell script needs to be updated as well.
479+
-->
480+
<attribute name="Export-Package" value="
481+
com.sun.jna;version=&quot;${osgi.version}&quot;,
482+
com.sun.jna.ptr;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna&quot;,
483+
com.sun.jna.win32;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna&quot;
484+
"/>
474485
<!-- Note that no terminal "*" is included in this list,
475486
which will force failure on unsupported platforms.
476487
-->
@@ -761,7 +772,7 @@ osname=macosx;processor=aarch64
761772
<property name="spec.title" value="${spec.title}"/>
762773
<property name="spec.vendor" value="${spec.vendor}"/>
763774
<property name="spec.version" value="${spec.version}"/>
764-
<property name="osgi.version" value="${jna.major}.${jna.minor}.${jna.revision}"/>
775+
<property name="osgi.version" value="${osgi.version}"/>
765776
<fileset dir="${contrib}" includes="platform/build.xml" />
766777
</subant>
767778
<!-- Sources package as required by maven -->

contrib/platform/build.xml

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -145,22 +145,28 @@
145145
<attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
146146
<attribute name="Bundle-Vendor" value="${vendor}"/>
147147
<attribute name="Require-Bundle" value="com.sun.jna;bundle-version=&quot;${osgi.version}&quot;"/>
148+
<!--
149+
The full "Export-Package" statement can be generated by invoking
150+
create-export-package-metadata-pom.sh in the main folder. This is
151+
necessary if the exported packages change. Then the list in the
152+
shell script needs to be updated as well.
153+
-->
148154
<attribute name="Export-Package"
149155
value="
150-
com.sun.jna.platform;version=${osgi.version},
151-
com.sun.jna.platform.dnd;version=${osgi.version},
152-
com.sun.jna.platform.linux;version=${osgi.version},
153-
com.sun.jna.platform.mac;version=${osgi.version},
154-
com.sun.jna.platform.unix;version=${osgi.version},
155-
com.sun.jna.platform.unix.aix;version=${osgi.version},
156-
com.sun.jna.platform.unix.solaris;version=${osgi.version},
157-
com.sun.jna.platform.win32;version=${osgi.version},
158-
com.sun.jna.platform.win32.COM;version=${osgi.version},
159-
com.sun.jna.platform.win32.COM.tlb;version=${osgi.version},
160-
com.sun.jna.platform.win32.COM.tlb.imp;version=${osgi.version},
161-
com.sun.jna.platform.win32.COM.util;version=${osgi.version},
162-
com.sun.jna.platform.win32.COM.util.annotation;version=${osgi.version},
163-
com.sun.jna.platform.wince;version=${osgi.version}
156+
com.sun.jna.platform;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna,com.sun.jna.platform.win32&quot;,
157+
com.sun.jna.platform.dnd;version=&quot;${osgi.version}&quot;,
158+
com.sun.jna.platform.linux;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna,com.sun.jna.platform.unix&quot;,
159+
com.sun.jna.platform.mac;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna,com.sun.jna.platform,com.sun.jna.platform.unix,com.sun.jna.ptr&quot;,
160+
com.sun.jna.platform.unix;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna,com.sun.jna.ptr&quot;,
161+
com.sun.jna.platform.unix.aix;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna&quot;,
162+
com.sun.jna.platform.unix.solaris;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna,com.sun.jna.ptr&quot;,
163+
com.sun.jna.platform.win32;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna,com.sun.jna.platform,com.sun.jna.platform.win32.COM,com.sun.jna.ptr,com.sun.jna.win32&quot;,
164+
com.sun.jna.platform.win32.COM;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna,com.sun.jna.platform.win32,com.sun.jna.platform.win32.COM.util,com.sun.jna.ptr,com.sun.jna.win32&quot;,
165+
com.sun.jna.platform.win32.COM.tlb;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna.platform.win32.COM.tlb.imp&quot;,
166+
com.sun.jna.platform.win32.COM.tlb.imp;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna.platform.win32,com.sun.jna.platform.win32.COM&quot;,
167+
com.sun.jna.platform.win32.COM.util;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna,com.sun.jna.platform.win32,com.sun.jna.platform.win32.COM,com.sun.jna.platform.win32.COM.util.annotation,com.sun.jna.ptr&quot;,
168+
com.sun.jna.platform.win32.COM.util.annotation;version=&quot;${osgi.version}&quot;,
169+
com.sun.jna.platform.wince;version=&quot;${osgi.version}&quot;;uses:=&quot;com.sun.jna,com.sun.jna.platform.win32&quot;
164170
"/>
165171
</manifest>
166172
<manifest file="@{target}" mode="update" if:true="@{module-info}">
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
4+
http://maven.apache.org/maven-v4_0_0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>net.java.dev.jna</groupId>
8+
<artifactId>create-export-package-metadata</artifactId>
9+
<version>1.0.0</version>
10+
<packaging>bundle</packaging>
11+
12+
<properties>
13+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
14+
</properties>
15+
16+
<build>
17+
<sourceDirectory>${sourceDirectory}</sourceDirectory>
18+
<outputDirectory>${outputDirectory}</outputDirectory>
19+
<plugins>
20+
<plugin>
21+
<groupId>org.apache.felix</groupId>
22+
<artifactId>maven-bundle-plugin</artifactId>
23+
<version>5.1.8</version>
24+
<extensions>true</extensions>
25+
<configuration>
26+
<instructions>
27+
<Export-Package>${exportedPackages}</Export-Package>
28+
<Import-Package>${importedPackages}</Import-Package>
29+
</instructions>
30+
</configuration>
31+
<executions>
32+
<execution>
33+
<id>bundle-manifest</id>
34+
<phase>process-classes</phase>
35+
<goals>
36+
<goal>manifest</goal>
37+
</goals>
38+
</execution>
39+
</executions>
40+
</plugin>
41+
</plugins>
42+
</build>
43+
44+
</project>

create-export-package-metadata.sh

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/env sh
2+
set -e
3+
4+
extract_export_package_value_for_buildxml() {
5+
sed -z -E 's:\r?\n ::g' "$1" \
6+
| grep '^Export-Package' \
7+
| sed 's/^Export-Package: //' \
8+
| sed 's/",/",\n/g' \
9+
| sed 's/1\.0\.0/${osgi.version}/g' \
10+
| sed 's/"/\&quot;/g'
11+
}
12+
13+
rm -rf tmp
14+
15+
mkdir tmp
16+
17+
cp -r src tmp
18+
19+
mvn \
20+
-f create-export-package-metadata-pom.xml \
21+
-DsourceDirectory=tmp/src \
22+
-DoutputDirectory=tmp/target \
23+
-DexportedPackages=com.sun.jna,com.sun.jna.ptr,com.sun.jna.win32 \
24+
clean package
25+
26+
cp -r contrib/platform/src tmp
27+
28+
mvn \
29+
-f create-export-package-metadata-pom.xml \
30+
-DsourceDirectory=tmp/src \
31+
-DoutputDirectory=tmp/target-platform \
32+
-DexportedPackages=\
33+
com.sun.jna.platform,\
34+
com.sun.jna.platform.dnd,\
35+
com.sun.jna.platform.linux,\
36+
com.sun.jna.platform.mac,\
37+
com.sun.jna.platform.unix,\
38+
com.sun.jna.platform.unix.aix,\
39+
com.sun.jna.platform.unix.solaris,\
40+
com.sun.jna.platform.win32,\
41+
com.sun.jna.platform.win32.COM,\
42+
com.sun.jna.platform.win32.COM.tlb,\
43+
com.sun.jna.platform.win32.COM.tlb.imp,\
44+
com.sun.jna.platform.win32.COM.util,\
45+
com.sun.jna.platform.win32.COM.util.annotation,\
46+
com.sun.jna.platform.wince \
47+
-DimportedPackages=com.sun.jna,com.sun.jna.ptr,com.sun.jna.win32 \
48+
clean package
49+
50+
echo 'build.xml: Export-Package:'
51+
echo
52+
extract_export_package_value_for_buildxml tmp/target/META-INF/MANIFEST.MF
53+
echo
54+
echo
55+
56+
echo 'contrib/platform/build.xml: Export-Package:'
57+
echo
58+
extract_export_package_value_for_buildxml tmp/target-platform/META-INF/MANIFEST.MF
59+
echo
60+
echo
61+
62+
rm -r tmp

0 commit comments

Comments
 (0)