Felix Knecht schrieb:
>> Hi,
>>
>> When checking out studio from SVN and running "mvn studio:eclipse" the
>> MANIFEST.MF isn't created properly. No "Export-Package" is created in
>> the MANIFEST.MF.
>>
>> In the following I use the "jars" plugin only.
>>
>> I found out that "bundle:manifest" brings some warnings:
>> --------------------------------------------
>> [WARNING] Warning in manifest for
>> org.apache.directory.studio:jars:jar:1.4.0-SNAPSHOT : No sub JAR or
>> directory lib/studio-dsml-parser-0.4.4-SNAPSHOT.jar
>> ...
>> --------------------------------------------
>>
>> That is because target/classes/lib with all the jars doesn't exist.
>
> If it's everywhere only a problem of copying the missing jar files to
> target/classes/lib it's probably faster to add
> just something to copy the libraries. Please note that this will only work if
> the snapshot repository is available
> (especially for the jars module ut maybe for others as well). If the user
> runs "mvn studio:eclipse -o" (-o for offline)
> it'll still not work because of missing dependencies.
> Maybe another solution is to have the export packages explicitly listed
> instead of using the wildcard '*'. So it'll be
> something like
>
> <Export-Package>org.apache.commons.collections.keyvalue;uses:="org.apache.commons.collections";version="1.4.0.SNAPSHOT",
> org.apache.log4j;uses:="org.slf4j.impl,org.apache.log4j.config,org.apache.log4j.helpers,
> <snip>...<snip>
> org.apache.directory.shared.asn1.ber.tlv;uses:="org.apache.directory.shared.asn1.util,
> org.apache.directory.shared.asn1.primitives,
> org.apache.directory.shared.asn1.codec";version="1.4.0.SNAPSHOT",
> org.xmlpull.v1.builder.impl;uses:="org.xmlpull.v1,
> org.xmlpull.v1.builder";version="1.4.0.SNAPSHOT"</Export-Package>
>
> instead of
>
> <Export-Package>!org.apache.commons.lang.enum,*</Export-Package>
>
> As it's nicer and easier to maintain I'd look for a solution to copy the
> missing dependencies into target/classes/lib before.
:( This will not work. The problem is the the bundle:manifest goal is designed
to be run just before creating the
library (jar) file and build the MF file according to what was built. Using the
bundle:manifest goal as we do isn't
according the the lifecycle design of this goal.
We can add something like
Index:
src/main/java/org/apache/directory/studio/maven/plugins/StudioEclipseMojo.java
===================================================================
---
src/main/java/org/apache/directory/studio/maven/plugins/StudioEclipseMojo.java
(Revision 746847)
+++
src/main/java/org/apache/directory/studio/maven/plugins/StudioEclipseMojo.java
(Arbeitskopie)
@@ -144,6 +144,7 @@
{
try
{
+ forkMvnGoal( "studio:prepare-jar-package" );
forkMvnGoal( "bundle:manifest" );
}
catch ( Exception e )
This will make the jars available in the target/calsses/lib directory and put
the packages into the MF Export-Package:
section. But this will not still not work for a configuration like
<Export-Package>*</Export-Package>. "These packages
are copied into the resulting bundle JAR file from the available classes (i.e.,
project classes, dependencies, and class
path);" [1] -> classes from the module itself are found without beeing compiled
before only in the src/java folder but
not in the classpath! Thus they will still not appear in the MF Export-Package:
section :(
-> Use patch above and make sure to have explicit listed package names from the
current module and NOT include all using
wildcard '*'
-> Or at least compile the whole project before using mvn studio:eclipse
[1] http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html
<Export-Package>
>
> Regards
> Felix
>
>> If I run a "mvn compile" first then all jars from the lib folder are
>> copied to target/classes/lib. Then "bundle:mainifest" works properly and
>> creates the "Export-Package" header.
>>
>> As a workaround I modified the StudioEclipseMojo and added a
>> forkMvnGoal( "compile" );
>> before running "bundle:manifest".
>>
>> It works but I wonder if that is a proper solution, Felix?
>>
>> Kind Regards,
>> Stefan
>>
>