in jps-wrapper/src/main/java/org/jetbrains/jps/model/serialization/JpsProjectLoader.java [157:222]
private void loadFromDirectory(@NotNull Path dir, @NotNull Executor executor) {
project.setName(JpsProjectConfigurationLoading.getDirectoryBaseProjectName(dir.getParent(), dir));
Path defaultConfigFile = dir.resolve("misc.xml");
JpsSdkType<?> projectSdkType = loadProjectRoot(myComponentLoader.loadRootElement(defaultConfigFile));
for (JpsModelSerializerExtension extension : JpsModelSerializerExtension.getExtensions()) {
for (JpsProjectExtensionSerializer serializer : extension.getProjectExtensionSerializers()) {
myComponentLoader.loadComponents(dir, defaultConfigFile, serializer, project);
}
}
Path externalConfigDir;
if (externalConfigurationDirectory == null) {
externalConfigDir = null;
}
else {
externalConfigDir = externalConfigurationDirectory.resolve("project");
LOG.info("External project config dir is used: " + externalConfigDir);
}
Element moduleData = myComponentLoader.loadComponent(dir.resolve("modules.xml"), MODULE_MANAGER_COMPONENT);
if (externalConfigDir != null) {
Element externalModuleData;
Element rootElement = myComponentLoader.loadRootElement(externalConfigDir.resolve("modules.xml"));
if (rootElement == null) {
externalModuleData = null;
}
else {
externalModuleData = JDomSerializationUtil.findComponent(rootElement, "ExternalProjectModuleManager");
if (externalModuleData == null) {
externalModuleData = JDomSerializationUtil.findComponent(rootElement, "ExternalModuleListStorage");
}
// old format (root tag is "component")
if (externalModuleData == null && rootElement.getName().equals(JDomSerializationUtil.COMPONENT_ELEMENT)) {
externalModuleData = rootElement;
}
}
if (externalModuleData != null) {
String componentName = externalModuleData.getAttributeValue("name");
LOG.assertTrue(componentName != null && componentName.startsWith("External"));
externalModuleData.setAttribute("name", componentName.substring("External".length()));
if (moduleData == null) {
moduleData = externalModuleData;
}
else {
JDOMUtil.deepMerge(moduleData, externalModuleData);
}
}
}
Path workspaceFile = dir.resolve("workspace.xml");
loadModules(moduleData, projectSdkType, workspaceFile, executor);
Runnable timingLog = TimingLog.startActivity("loading project libraries");
for (Path libraryFile : JpsProjectConfigurationLoading.listXmlFiles(dir.resolve("libraries"))) {
loadProjectLibraries(myComponentLoader.loadRootElement(libraryFile));
}
if (externalConfigDir != null) {
loadProjectLibraries(myComponentLoader.loadRootElement(externalConfigDir.resolve("libraries.xml")));
}
timingLog.run();
JpsProjectConfigurationLoading.loadArtifactsFromDirectory(project, myComponentLoader, dir, externalConfigDir);
JpsProjectConfigurationLoading.loadRunConfigurationsFromDirectory(project, myComponentLoader, dir, workspaceFile);
}