2012-12-17 100 views
0

想象我有文件夹如何防止jar-in-jar-loader加载特定的类?

  • 一个
  • Ç

和许多外部罐的下列项目结构。

现在我正在尝试构建两个不同的可执行文件,如A + B,A + C。首先,我做了Eclipse - > Export - > Executable Jar并为Ant保存脚本。所以它会生成Ant脚本和jar-in-jar-loader。现在我修改ant脚本来排除文件夹B

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

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

建设罐子运行后给出了这样的错误:

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 

但我相信B级并不在A.

好像JarRscrLoader尝试加载所有上市班使用应用程序启动我该如何预防?

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

回答

0

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

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

+0

它不是关于图书馆,它是关于类或文件夹 –

+0

哦,对此感到抱歉。如果选择“将所需的库提取到生成的JAR中”会发生什么?至少对我来说,Eclipse不包括jar-in-jar加载器,因此不包含自定义类加载器。还请检查生成的.jar文件中的META-INF目录是否存在任何依赖关系。 – SirRichie

+0

看来,在Eclipse运行配置我不能配置从构建路径排除特定的类。在META-INF中,不存在对类的依赖关系,只对库存有依赖关系。 –