开发者

Executable JAR & Ant

开发者 https://www.devze.com 2023-04-03 05:22 出处:网络
I\'m writing an Ant build.xml file for an executable JAR for the first time, and am stumped as to what I need to include in the JAR.

I'm writing an Ant build.xml file for an executable JAR for the first time, and am stumped as to what I need to include in the JAR.

The project can be thought of being composed of the following:

  1. The source code
  2. A handful of dependency JARs
  3. A Spring configuration file (XML) for IoC via ClassPathXmlApplicationContext

Here's my question: since this is an executable JAR, should I be JARring up all the dependency JARs as well, or should I keep them separate? I suspect I need to include them in the JAR, and if this is true, what would best practices dictate for organizing my JAR?

Here's my first attempt:

MyExecutableJARProgram.jar/
    META-INF/
        ...
    com/
    lib/
    config/
开发者_如何学JAVA

Where com/ is my top-level package, lib/ is a directory housing all of these dependencies, and config/ holds the required XML files.

(1) Any thoughts?

Also, as a side question, since the JAR file will have a different directory structure than my Eclipse project, I need someway of setting up the classpath for my JAR (so it knows to look in, say, lib/ for its dependencies), as well as specifying where to look for my Spring XML file.

(2) How do I configure this in the JAR - the manifest file? There must be some way to configure the manifest (or whatever is the answer to this question) file through Ant so I don't need to manually edit the JAR every time I build.

Thanks for any input!


Unless you are willing to write a custom classloader, the manifest classpath does not support nested JARs. Instead, a typical approach is to place any third party binaries and your JARs in the same (or well known) directory, and refer to one another using manifest classpaths. Remember that that entries in the manifest classpath are relative to the main jar.

So for some non-trivial project, your distribution layout may look like:

[apphome]
  +-- bin
        +-- command1.sh / .bat  (to supply -Xmx etc)
        +-- command2.sh / .bat
            ...
  +-- lib
        +-- module1.jar
        +-- module2.jar
            ...
        +-- command1.jar (manifest cp contains modules, 3rd party, main-class)
        +-- command2.jar
            ...
  +-- deps
        +-- 3rdparty1.jar
        +-- 3rdparty2.jar
             ...
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号