Intellij在哪里存储有关为模块配置哪些内容根的数据?

时间:2015-09-17 14:27:14

标签: java eclipse git intellij-idea

如果我转到Intellij中的项目结构菜单,选择一个模块并转到sources选项卡,我可以将内容根添加到项目位置之外的模块。

我希望找到的是intellij存储此设置的位置。我想某处有一个xml文件,它描述了为模块设置了什么内容根,但是我无法在我的生活中找到它。

一些背景知识:

我想解决的问题是,我现在正在处理的项目非常庞大且结构非常奇怪(认为包名不匹配目录结构)并使用Makefile编译。由于这个原因(可能还有一些原因,我还没有解决)如果我只是将源作为一个新项目从现有源导入,Intellij无法找到大多数类。

项目中的大多数其他开发人员使用命令行和vim的组合,但是有一个开发人员使用Eclipse。这个开发人员编写了一个工具,可以从源代码创建多个Eclipse项目(大约40个),并使用Eclipse提供的LinkedResources功能,能够将其链接回原始源位置,而无需在存储库中放置任何内容。 / p>

我能够将这个eclipse项目导入到Intellij中,但Intellij无法翻译或理解LinkedResources的概念,因此在Intellij中创建的模块和包是空的,但它已设法找到.class文件和反编译它们(我假设是因为Eclipse .classpath文件),所以我可以看到每个Eclipse项目的反编译类(在我的Intellij项目中创建为模块)。如果我然后手动浏览模块并添加与Eclipse .project文件中的LinkedResource标记中指定的路径匹配的内容根,那么我就能找到实际的.java文件并进行编辑。精彩!

问题的第二部分源于公司围绕使用git的过程。我工作的公司使用克隆的repos进行功能工作,而不是使用分支进行新功能工作。所以这意味着当我开始一项新工作时,我需要在托管git的服务器上克隆repo,然后在本地克隆并提交并推送到该repo。这意味着我无法将此项目设置为一次并且不管它而只是切换分支,我需要在每次需要切换回购时重新创建项目。

eclipse项目通过使用带有sed命令的脚本来查找和替换.project文件中的LinkedResources标记中的正确文件路径以指向不同的repos,当您想要处理不同的功能时,Eclipse会随后更新和指向新文件,当您编辑文件时,您正在编辑新的远程位置。

我希望能够通过使用sed命令(或类似的东西)来修复指定内容根的路径,以便我可以继续使用Intellij而不必使用Eclipse。鉴于创建了40个左右的模块,每次切换回购时手动执行任务都非常费时。

我很欣赏正确方向上的任何指针,或者可能用于解决此问题的任何其他建议。谢谢!

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要设置项目的源文件夹。这进入了项目附带的.iml(模块文件)。在该XML文件中查找路径module.component.content

例如,一个非常常规的模块将遵循这种结构:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="false">
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />

    <!-- This is what you're looking for -->
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
      <excludeFolder url="file://$MODULE_DIR$/../jaxrs-container-api/target" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Maven: javax.ws.rs:javax.ws.rs-api:2.0.1" level="project" />
  </component>
</module>