如何在Intellij IDEA 11中构建使用Maven导入的项目?

5
我已通过导入maven项目创建了一个新的IntelliJ项目,这很顺利: enter image description here 我可以从Maven Projects面板(在IDE屏幕左侧)执行maven目标。例如,我可以使用compile目标编译项目。
现在,我想使用“Build|Make Project”选项从UI构建项目。然而,它不起作用。它抱怨缺少应用程序包,好像它看不到依赖项。这些依赖关系在各自的pom.xml文件中定义,但从IDE制作项目似乎忽略了它。
我该怎么做才能使其工作?
编辑
好的,我已从我的主目录中删除了.m2目录,并从Maven Projects flyout启动了编译目标。我可以在控制台窗格中看到maven从Maven Central下载依赖项(我只给出日志的前几行,它非常长):
"C:\Program Files (x86)\Java\jdk1.6.0_29\bin\java" -Dclassworlds.conf=O:\java\apache-maven-3.0.4\bin\m2.conf -Dmaven.home=O:\java\apache-maven-3.0.4 -Didea.launcher.port=7534 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 11.1.2\bin" -Dfile.encoding=UTF-8 -classpath "O:\java\apache-maven-3.0.4\boot\plexus-classworlds-2.4.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA 11.1.2\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain org.codehaus.classworlds.Launcher --no-plugin-registry --fail-fast --strict-checksums --update-snapshots -f C:\dev\shunra\Application\Builder\build\vcat\pom.xml compile
[WARNING] Command line option -npr is deprecated and will be removed in future Maven versions.
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.shunra:VCat-build:pom:1.0.0.SNAPSHOT
[WARNING] 'version' uses an unsupported snapshot version format, should be '*-SNAPSHOT' instead. @ line 7, column 11
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] util.logging
[INFO] Infra
[INFO] dtos
[INFO] commons
[INFO] license
[INFO] core
[INFO] vcat
[INFO] VCat-build
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building util.logging 0.0.1
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.5/maven-resources-plugin-2.5.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.5/maven-resources-plugin-2.5.pom (7 KB at 7.2 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/19/maven-plugins-19.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/19/maven-plugins-19.pom (11 KB at 38.7 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/19/maven-parent-19.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/19/maven-parent-19.pom (25 KB at 70.0 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/apache/9/apache-9.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/apache/9/apache-9.pom (15 KB at 63.5 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.5/maven-resources-plugin-2.5.jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.5/maven-resources-plugin-2.5.jar (26 KB at 63.1 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/2.3.2/maven-compiler-plugin-2.3.2.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/2.3.2/maven-compiler-plugin-2.3.2.pom (8 KB at 29.6 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/18/maven-plugins-18.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/18/maven-plugins-18.pom (13 KB at 53.6 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/16/maven-parent-16.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/16/maven-parent-16.pom (23 KB at 66.8 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/apache/7/apache-7.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/apache/7/apache-7.pom (15 KB at 59.5 KB/sec)

所以,我想连接到Maven Central没有问题。
编辑2
请注意: enter image description here 注意问题-有两个模块从Maven导入-Common和Core。它们的Maven artifact Id分别是commons和core。IntelliJ似乎混淆了artifact Id和模块名称,因为:
  1. 项目flyout显示模块名称,后跟括号中的相应maven artifact Id。
  2. 在项目设置对话框中,只给出各自的maven artifact Id。
  3. 但在模块依赖项中,仅列出模块名称。
Core模块(Maven artifact Id core)应该看到依赖关系Common模块(Maven artifact Id commons),但它没有,这就是问题所在。
编辑3
这是最顶层的pom.xml:
<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>com.shunra</groupId>
    <name>VCat-build</name>
    <version>1.0.0.SNAPSHOT</version>
    <artifactId>VCat-build</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>../../../util.logging</module>
        <module>../../../Infra</module>
        <module>../../../DTOs</module>
        <module>../../../ShunraLicense</module>
        <module>../../../Common</module>
        <module>../../../Core</module>
        <module>../../../VCat</module>
    </modules>
    <build>
        <plugins>
        </plugins>
    </build>
</project>

这是与“共同模块”相关的翻译:
<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>com.shunra</groupId>
  <artifactId>commons</artifactId>
  <version>0.0.1</version>
  <dependencies>
        <dependency>
            <groupId>com.sun.jna</groupId>
            <artifactId>jna</artifactId>
            <version>3.0.9</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-math</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.4</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.2.7</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
                <groupId>com.shunra</groupId>
                <artifactId>util.logging</artifactId>
                <version>0.0.1</version>
        </dependency>
        <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>1.6</version>
                <scope>compile</scope>
        </dependency>
        <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.6</version>
                <scope>compile</scope>
        </dependency>
        <dependency>
              <groupId>org.restlet.jse</groupId>
              <artifactId>org.restlet</artifactId>
              <version>2.0.10</version>
        </dependency>
        <dependency>
          <groupId>javax.inject</groupId>
          <artifactId>javax.inject</artifactId>
          <version>1</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>commons-configuration</groupId>
            <artifactId>commons-configuration</artifactId>
            <version>1.8</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.8.3</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
<!--        <dependency>
            <groupId>com.shunra</groupId>
            <artifactId>license</artifactId>
            <version>0.0.1</version>
        </dependency> -->
        <dependency>
              <groupId>com.shunra</groupId>
              <artifactId>dtos</artifactId>
              <version>0.0.1</version>
        </dependency>
  </dependencies>
    <repositories>
    <repository>
       <id>maven-restlet</id>
       <name>Public online Restlet repository</name>
       <url>http://maven.restlet.org</url>
    </repository> 
   </repositories>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source/>
          <target/>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

这里是核心模块的内容:

<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>com.shunra</groupId>
  <artifactId>core</artifactId>
  <version>0.0.1</version>
  <dependencies>
    <dependency>
      <groupId>com.shunra</groupId>
      <artifactId>commons</artifactId>
      <version>0.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.shunra</groupId>
        <artifactId>license</artifactId>
        <version>0.0.1</version>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source/>
          <target/>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

编辑4

问题终于解决了。删除了所有Intellij文件,重新导入。我猜测pom.xml文件的更改方式让IntelliJ产生了困惑。


你检查过 perfect 是否是一个 Maven 项目了吗?它似乎没有正确设置依赖,例如,它没有从 pom 中拉取依赖。 - Dave Newton
刚刚在主题上添加了EDIT2,我该如何修复它? - mark
1个回答

5
看着截图,你似乎没有离线工作,这是出现此问题的最常见原因。
  1. 尝试从Maven项目飞出窗口(它是从左边数第三个图标)下载源代码和文档。这通常会使其唤醒并引起下载。

  2. 使用运行时配置执行手动的Maven构建。选择“编辑配置| Maven”,然后确保您的工作目录是项目根目录,并选择一个目标为“clean package”。这将强制Intellij直接通过Maven进行重建,这可能会唤醒内部后台构建过程。

  3. 检查您的设置,并确保Intellj的Maven已正确读取来自POM的存储库信息,并能够定位Maven Central。您可能有一个本地settings.xml的问题,阻止下载。

  4. 您还可以删除.idea和.iml文件以强制重新导入项目。

  5. 重新启动Intellij,希望一切顺利......

  6. 作为最后的手段,通过文件 | 无效缓存来失效缓存。这可能会使您的开发速度变慢,直到它们通过使用重建。

编辑以涵盖更新的问题

看起来你的POM文件有点混乱。它们不遵循标准的Maven目录结构,因此Intellij可能会在目录名称和内部artifactId条目之间产生混淆。通常,父POM(包含模块)放置在项目的根目录中,而模块则形成了一个目录层次结构。

通过一些广泛的设置配置,你可以强制Intellij使用现有的结构,但更好的解决方案是将目录重命名以匹配artifactIds,并移动模块,使其形成Maven反应堆项目。

根据评论进一步编辑

似乎是Intellij项目同步的问题。删除.idea目录和.iml文件就可以解决问题。我已经相应地更新了列表。


好的 - 既然它似乎正在下载,这是否解决了您的问题? - Gary
这听起来像是一个POM错误。从命令行中它是否能正常工作?你能否发布简化版本的POM文件以供检查? - Gary
它肯定可以从命令行运行。我将在一会儿发布pom.xml文件。 - mark
我无法将子模块放置在根模块下,因为有几个根模块共享一个大部分重叠的子模块集。但我可以尝试重命名文件夹名称以匹配工件ID。 - mark
1
虽然你付出了很多努力,但问题在于IntelliJ似乎没有遵循pom.xml文件中的更改。我已经删除了.idea文件夹和所有.iml文件,然后重新导入。现在它可以正常工作了。 - mark
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接