2017-12-19 1 views
1

Maven 프로젝트를 만들 때마다 파일 .iml과 파일 pom.xml이 있습니다. 관계가 정확히 무엇입니까?.iml 파일과 pom.xml 파일 간의 관계

+0

IML은하게 IntelliJ IDEA 모듈에 의해 생성 된 파일이며 .iml. 개발 모듈에 대한 정보를 저장하고 모듈 경로, 종속성 및 기타 설정을 저장합니다. –

답변

0

pom.xml은 프로젝트의 종속성, 실행할 플러그인 및 기타 많은 것들을 해결하기 위해 maven에서 사용됩니다. maven website :

프로젝트 개체 모델 또는 POM은 Maven의 기본적인 작업 단위입니다. Maven이 프로젝트를 빌드하는 데 사용하는 프로젝트 및 구성 정보에 대한 정보가 들어있는 XML 파일입니다.

반면에 .iml 파일 인 IntelliJ 자신의 project structure의 일부입니다. 짧은 버전은 나머지 프로젝트 또는 다른 프로젝트가 아닌 모듈에만 표시되는 라이브러리 (예 : jar)를 선언한다는 것입니다. pom.xml에 선언 된 각 이슈에 해당하는 라이브러리 항목이 포함 된 xml 파일이며 해당 범위 (예 : TEST 또는 COMPILE)와 함께 표시됩니다. 예를 들어 :

<?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"> 
    <output url="file://$MODULE_DIR$/target/classes" /> 
    <output-test url="file://$MODULE_DIR$/target/test-classes" /> 
    <content url="file://$MODULE_DIR$"> 
     <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> 
     <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> 
     <excludeFolder url="file://$MODULE_DIR$/target" /> 
    </content> 
    <orderEntry type="inheritedJdk" /> 
    <orderEntry type="sourceFolder" forTests="false" /> 
    <orderEntry type="library" scope="COMPILE" name="Maven: com.google.guava:guava:18.0" level="project" /> 
    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" /> 
    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" /> 
    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" /> 
    </component> 
</module> 

나는 관계없이 프로젝트 (예를 들어 받는다는Gradle을)를 사용하는 빌드 시스템, 그것은 프로젝트 빠르게 읽을 수 있도록 인 IntelliJ가 자신의 파일 형식을 유지 가정합니다.

+0

현재 Maven 프로젝트에 파일을 추가하는 적절한 방법은 무엇입니까? 나는 오른쪽 clik "new-> file"에 의해 파일을 추가하려했으나 다음에 프로젝트를 열 때 사라졌다. – derek

+0

보통 IntelliJ의 [프로젝트 도구 창] (https://www.jetbrains.com/help/idea/tool-windows.html)에서 원하는 폴더 (또는 Java 패키지)를 마우스 오른쪽 단추로 클릭하고 '새로 만들기'를 선택하십시오 ->'자바 클래스'또는 내가 추가하고 싶은 파일 유형. – gjoranv

1

IntelliJ 아이디어가 maven project mode (POM.xml) 자체를 이해하지 못합니다. 아이디어에서 maven 프로젝트를 생성하거나 가져올 때. 또한 자체 프로젝트 구조, Maven 종속성, 모듈 세부 사항 등을 생성합니다. 기본적으로 프로젝트 메타 데이터는 내부적으로 이해하고 사용할 수있는 형식으로 작업에 필요합니다. 이 메타 데이터는 .iml 파일과 .idea 프로젝트 디렉토리에 저장됩니다.

자신의 구조를 유지하는 주된 이점은 더 빠르게 실행하고 프로젝트를 효율적으로 관리 할 수있는 능력을 제공합니다. 이 두 파일 간의 관계에 대한 설명을하기를 바랍니다.

샘플의 pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>test</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>${log4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${org.slf4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.easymock</groupId> 
      <artifactId>easymock</artifactId> 
      <version>2.5.2</version> 
      <optional>true</optional> 
     </dependency> 
     <dependency> 
      <groupId>org.jmock</groupId> 
      <artifactId>jmock</artifactId> 
      <version>${jmock.version}</version> 
      <optional>true</optional> 
     </dependency> 
     <dependency> 
      <groupId>org.jmock</groupId> 
      <artifactId>jmock-junit4</artifactId> 
      <version>${jmock.version}</version> 
      <optional>true</optional> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>${junit.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>junitperf</groupId> 
      <artifactId>junitperf</artifactId> 
      <version>1.8</version> 
     </dependency> 
    </dependencies> 

    <properties> 
     <jmock.version>2.5.1</jmock.version> 
     <junit.version>4.6</junit.version> 
     <log4j.version>1.2.14</log4j.version> 
     <org.slf4j.version>1.5.2</org.slf4j.version> 
    </properties> 
</project> 

Relavent IDEA는

<?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"> 
    <output url="file://$MODULE_DIR$/target/classes" /> 
    <output-test url="file://$MODULE_DIR$/target/test-classes" /> 
    <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" /> 
    </content> 
    <orderEntry type="inheritedJdk" /> 
    <orderEntry type="sourceFolder" forTests="false" /> 
    <orderEntry type="library" name="Maven: log4j:log4j:1.2.14" level="project" /> 
    <orderEntry type="library" name="Maven: org.slf4j:slf4j-log4j12:1.5.2" level="project" /> 
    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.5.2" level="project" /> 
    <orderEntry type="library" name="Maven: org.easymock:easymock:2.5.2" level="project" /> 
    <orderEntry type="library" name="Maven: org.jmock:jmock:2.5.1" level="project" /> 
    <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" /> 
    <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-library:1.1" level="project" /> 
    <orderEntry type="library" name="Maven: org.jmock:jmock-junit4:2.5.1" level="project" /> 
    <orderEntry type="library" name="Maven: junit:junit-dep:4.4" level="project" /> 
    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.6" level="project" /> 
    <orderEntry type="library" name="Maven: junitperf:junitperf:1.8" level="project" /> 
    </component> 
</module> 
관련 문제