Java 在这种情况下,classLoader加载类的顺序

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

我在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.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的构建路径以显示库的导出。