如何防止jar-in-jar-loader加载特定的类?

时间:2012-12-17 12:10:15

标签: java eclipse jar classloader classnotfoundexception

想象一下,我有一个以下文件夹的项目结构

  • A
  • C

和许多外部罐子。

现在我正在尝试构建两个不同的可执行jar,例如A + B,A + C.

首先,我做Eclipse - >出口 - > Ant的可执行Jar和保存脚本。所以它生成了Ant脚本和jar-in-jar-loader。现在我修改ant脚本以排除文件夹B

    <fileset dir="C:/Users/Nikolay/bin">
        <exclude name="org/B"/>
    </fileset>

并保持jar-in-jar-loader.zip文件不被修改。

构建jar运行后出现此错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/B
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:56)
Caused by: java.lang.ClassNotFoundException: org.B
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        ... 3 more

但我确信A类中没有使用B类。

似乎JarRscrLoader尝试在应用程序启动时加载所有列出的类。 如何防止这种情况?

请不要建议我将Eclipse中的代码拆分为2-3个项目。

1 个答案:

答案 0 :(得分:0)

创建两个不同的运行配置(运行 - >运行配置...),并根据您的要求修改类路径选项卡中包含的库。

导出项目时,只需选择适当的配置即可。