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
>>
> 

Reply via email to