0

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

  • 一种
  • C

和许多外部罐子。

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

首先,我执行 Eclipse -> Export -> Executable Jar 并为 Ant 保存脚本。所以它会生成 Ant-script 和 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 个项目。

4

1 回答 1

0

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

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

于 2012-12-17T12:35:34.747 回答