如果我转到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个左右的模块,每次切换回购时手动执行任务都非常费时。
我很欣赏正确方向上的任何指针,或者可能用于解决此问题的任何其他建议。谢谢!
答案 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>