1

I am using (and learning) Buildr to build and package my projects. I would like to auto generate the class-path attribute in an EJB projects MANIFEST file. Currently I am doing:

manifest_cp = compile.dependencies.map { |d| 
    "#{File.basename(d.name)}"
}.join(" ")

package(:jar).with :manifest=>manifest.merge('Class-Path'=>manifest_cp)

I am new to Ruby and Buildr so there probably is a better way to do this. However I was actually hoping to be able to generate the jars I define and package in my EAR as opposed to getting the compile dependencies in my JAR.

I package my ear project like:

package(:ear).include(ANTLR, AOP_ALLIANCE, ...

Is it possible in my EJB project build when packaging the jar and modifying the manifest I create the Class-Path attribute with all the dependencies packaged in the EAR? On top of that I would also like to exclude one or two dependencies?

thanks

UPDATE

I tried a different approach that seems better (but still probably there are much better ways than what I have). I created a constant that held all my artifacts I want to include in my EAR and then built up the classpath string:

EARLIBS = [ANTLR, AOP_ALLIANCE, ... ]
manifest_cp = Buildr.artifacts(EARLIBS).each { |artifact| artifact.invoke }.map{ |d| 
        "#{File.basename(d.to_s)}"
}.join(" ")

When I package the EJB I specify the manifest_cp that was created above:

package(:jar).with :manifest=>manifest.merge('Class-Path'=>manifest_cp)

When I package the EAR I reference the constant declared with all the artifacts:

package(:ear).include(EARLIBS)

Even though this works for what I want I would appreciate it if anyone has a better way of doing it

thanks,

Ross
  • 3,008
  • 1
  • 22
  • 27

1 Answers1

0

The builds doc for the EarTask contains the solution I believe:

All specified libraries are added to the EAR archive and the Class-Path manifiest entry is modified for each EAR component.

Antoine Toulme
  • 937
  • 4
  • 15