想象一下我有一个文件夹的以下项目结构
- 一种
- 乙
- 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 个项目。