Java 在这种情况下,classLoader加载类的顺序
我在eclipse中的java项目中添加了Java 在这种情况下,classLoader加载类的顺序,java,eclipse,classloader,lombok,eclipse-classpath,Java,Eclipse,Classloader,Lombok,Eclipse Classpath,我在eclipse中的java项目中添加了lombok。它要求我在eclipse.ini文件中将最后两行添加为vmargs -showlocation -vm /home/$USER/JavaSE8/jdk1.8/bin/java -startup plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar --launcher.library plugins/org.eclipse.equinox.launcher.gtk.lin
lombok
。它要求我在eclipse.ini
文件中将最后两行添加为vmargs
-showlocation
-vm
/home/$USER/JavaSE8/jdk1.8/bin/java
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20150204-1316
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms500m
-Xmx2g
-Dorg.eclipse.swt.browser.XULRunnerPath=''
-javaagent:/home/$USER/eclipse/4.4-luna-SR2/lombok.jar
-Xbootclasspath/a:/home/$USER/eclipse/4.4-luna-SR2/lombok.jar
我还在库(项目->属性->库)中添加了lombok.jar
,并将lombok.jar
移动到eclipse和JRE系统库(rt.jar、resources.jar等)中Order和Export选项卡(项目->属性->Order和Export)的最顶层。我对lombok
main类的加载顺序感到困惑,如下所示:
当eclipse
启动时,Bootstrap
classloader应该加载JRE目录中的所有JDK类。(但由于我已将lombok.jar
按顺序向上移动并导出,在JRE系统库之上,rt.jar会在lombok.jar
之后加载吗?大多数情况下不会,因为无论发生什么情况,引导库都应该首先加载!)
由于我们还使用-XBootstrapClasspath选项重新定义了引导类路径
,lombok.jar将由引导类加载器
加载
然后,Extensions类加载器
加载JRE的lib\ext目录中的类
然后System Classpath classloader
加载Classpath环境变量指定的所有类和jar(此加载是否考虑库的顺序和导出顺序?)
如果我错误地解释了这里的内容,请纠正我,因为我只是一个试图理解类加载迷宫的新手。您经常提到“订单和导出”。我假设您指的是项目类路径对话框中相同的命名选项卡。据我所知,这仅涉及依赖于此项目的其他项目的项目库的可见性。它与eclipse本身的引导方式无关。@kdgregory您能回答这个问题吗?@Juned Ahsan您能回答这个问题吗?仅供参考:由于至少版本为1.16.4,因此根本不需要将lombok.jar
添加到引导类路径中。您只需将jar作为代理添加即可。@RoelSpilker谢谢您提供的信息。是的,Lombok1.16.x只需添加jar作为代理即可工作。我只是想知道什么时候你们会添加一个jar作为代理和bootclasspath?我测试了你们写的关于依赖于这个项目的其他项目的项目库可见性的内容。所以我有2个,比如说A&B项目,我在其中添加了lombok.jar作为库。A也依赖于B。在A和B中,我都使用了龙目山。我从B的库中删除了lombok.jar。现在B中的lombok注释显示为红线(在eclipse中)。看起来您交换了顺序。如果在编写时A依赖于B,那么从项目A(而不是从B)中删除jar,并调整项目B的构建路径以显示库的导出。