2017-12-19 10 views
1

Mavenプロジェクトを作成するたびに.imlファイルとpom.xmlファイルがあります。 彼らの関係は正確には何ですか?.imlファイルとpom.xmlファイルの関係

+0

IMLはのIntelliJ IDEAによって作成されたモジュールのファイルです.IML。開発モジュールに関する情報を格納し、モジュールのパス、依存関係、およびその他の設定を保存します。 –

答えて

0

pom.xmlはプロジェクトの依存関係を解決するためにmavenによって使用されます。これは実行するプラグインとその他の多くのものです。 maven website

プロジェクトオブジェクトモデルまたはPOMは、Mavenの基本的な作業単位です。これは、Mavenがプロジェクトをビルドするために使用するプロジェクトと設定の詳細に関する情報を含むXMLファイルです。

他方、ファイルは、IntelliJ自身のproject structureの一部です。短いバージョンでは、プロジェクトやその他のプロジェクトの残りの部分ではなく、モジュールだけが見ることができるライブラリ(例:jar)を宣言しています。 pom.xmlに宣言された各成果物のライブラリエントリとそのスコープ(例:TESTまたはCOMPILE)を含むxmlファイルです。たとえば:

<?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> 

私はそれは関係なく、プロジェクトが(例えばMavenののGradle)を使用しているシステムを構築し、そのうちの高速化プロジェクトを読むことができるので、IntelliJのは、独自のファイル形式を保持しますと仮定します。

+0

現在のMavenプロジェクトにファイルを追加する適切な方法は何ですか?私は右のクリック "new-> file"でファイルを追加しようとしましたが、次回にプロジェクトを開くと消えてしまいました。 – derek

+0

私は通常IntelliJの[Project tool window](https://www.jetbrains.com/help/idea/tool-windows.html)でこれを行い、目的のフォルダ(またはJavaパッケージ)を右クリックし、 'New'を選択します - > 'Javaクラス 'または追加したいファイルタイプ。 – gjoranv

1

IntelliJのアイデアはmaven project mode(POM.xml)自体を理解していません。アイデアでMavenプロジェクトを作成またはインポートするとき。また、独自のプロジェクト構造、依存関係、モジュールの詳細などを作成します。基本的に必要なプロジェクトメタデータは、内部的に理解できるフォーマットで、アクションのために必要です。これらのメタデータは.imlファイルと.ideaプロジェクトディレクトリに格納されています。

独自の構造を維持することの主な利点は、より速く実行し、プロジェクトを効率的に管理する能力を提供することです。この2つのファイルの関係について説明してください。

サンプルの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> 
関連する問題