繁体   English   中英

Eclipse和javac的构建功能有什么区别?

[英]What's the differences between the build function of Eclipse and javac?

我在Eclipse中找到一个项目,它具有自己的类路径。

如果我使用Maven,请创建一个新的Web项目。

System.getProperty("java.class.path");

当我打印结果时,我发现类路径包含G:\\ newtool \\ workspace \\ springmvc \\ target \\ classes。

谁能解释其背后的原理。为什么类路径是此目录。 Eclipse的构建功能是否与命令javac -classpath相同?

我发现另一个问题。

public class KnightMain {
public static void main(String[] args) throws Exception {
    System.setProperty("java.class.path","G:/newtool/workspace;G:/newtool");
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("knight.xml");
    Knight knight = context.getBean(Knight.class);
    knight.embarkOnQuest();
    String s[] = System.getProperty("java.class.path").split(";");
    for (String string : s) {
        System.out.println(string);
    }
    context.close();
}

}

虽然我将类路径设置为不存在knight.xml的其他目录。但是ClassPathXmlApplicationContext终于找到了它。

System.setProperty("java.class.path","G:/newtool/workspace;G:/newtool");

没有区别。尽管打印结果是:

G:/newtool/workspace G:/newtool

两种不同的工具,两种不同的概念。

首先,eclipse具有自己的 java编译器。 它不以任何方式使用javac 令人惊讶的是,eclipse编译器使用的类路径就是所说的。

换句话说:在创建eclipse项目时,请配置其构建路径 构建路径确定应导入,导出,...等哪些库,其他项目。

而当您打开诸如shell之类的命令并直接调用javac时,类路径将基于您在此处进行的设置。 例如通过调用

javac -classpath /some/directory/with/classes:/some/bla.jar

或者您的情况:您正在使用Maven,它带有预定义的规则,项目依赖项等。 因此,您的类路径取决于maven适用于“ java Web项目”的约定/规则。 因此:如果您想了解Maven为您做的事情:您必须研究Maven文档以了解在那里使用的功能!

编辑:我认为您实际上正在尝试无法工作。 认为该特定的系统属性更多是“只读”值。 含义:您可以使用它来了解当前的类路径。 但是,编写该属性不会更改您当前正在运行的JVM的类路径。实际上,这很有道理:如果有任何Java代码可以即时更改类路径,那将在整个过程中发出“安全性问题”。地点! 这样一来,您就可以完全更改JVM从何处加载其类。

JVM使用java.class.path属性来查找要加载的类和JAR文件。 对于大多数可用的JVM(包括Oracle和IBM实施),此系统属性是通用的。 默认类加载器使用此属性,但并非所有自定义类加载器都使用此属性。 您可以实现自己的类加载器,该类加载器将忽略java.class.path并使用其他一些属性来查找特定于加载器的程序包。 一个例子是Eclipse。 Eclipse核心具有一个不使用java.class.path的自定义类加载器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM