How can I have Netbeans automatically copy 3rd party jars from an included class-library to my project's dist/lib directory?

Unai Vivi picture Unai Vivi · Feb 6, 2012 · Viewed 13k times · Source

I have a Java Application in NetBeans 7.1 (let's call it myApp) that depends on a Java Class-Library Project [more than one, actually] where I keep some utility-classes I share among projects.

This Class-Library Project (let's call it myLib) depends on [many] third party libraries (e.g. apache-commons-younameit.jar).

I included myLib as a library, and NetBeans' Ant script pulls myLib.jar in the dist/lib directory of my myApp project; however, the jars upon which myLib depends are not pulled in together with myLib, so my project gets runtime exceptions due to the missing apache-commons-youtnameit.jar.

I would like to have both myLib.jar and apache-commons-younameit.jar automatically pulled into myApp's dist/lib folder, so that I don't have to manually check all of my libraries' dependencies and add them to my main project.

  • Is there an obvious way to accomplish this through NetBeans dialogs that I'm missing?
  • or is it necessary to manually tweak my build.xml? If so, could you kindly post an example? (I'm not that well up on Ant)

What I'd like to avoid is the following:

  1. I need to add a new utility library, picking from my Java Class-Library Projects.
  2. I lookup into that library's libraries what jars are used and write them down.
  3. I go back to my main project and add those 3rd party libraries (only the ones that I haven't included already for direct use from within my main project itself).

Thank you in advance for any help, or for pointing me in the right direction.

Answer

Gregory Peck picture Gregory Peck · Aug 6, 2013

I found a way to copy "dependant libraries' dependant libraries" as you said in one of the comments. Hopefully this helps.

Add the following code to your NetBean project's build.xml file, after the <import file="nbproject/build-impl.xml"/> line. You will need to fill out a proper relative path in the <fileset> tags below.

<!--Copy over any "dependant libraries' dependant libraries" -->
<target name="-post-jar">
    <echo>Copying over extra jars into PROJECTNAME</echo>
    <copy todir="./dist/lib">
        <!-- put in order from least important to most important to prevent file overwrites -->
        <fileset dir="path-to-other-nb-project/dist/lib"></fileset>
        <fileset dir="path-to-second-nb-project/dist/lib"></fileset>
    </copy>
</target>

Not the cleanest code, but it solved the problem for me. You'll need to manually update this as you add extra dependant projects to your main project.