【问题标题】:Importing a Maven project (Android) with IntelliJ IDEA使用 IntelliJ IDEA 导入 Maven 项目 (Android)
【发布时间】:2016-02-07 05:44:46
【问题描述】:

如果我使用带有 Maven 集成的 IDE (IntelliJ IDEA) 来导入 Maven 项目 (Android),我是否还需要在命令行上运行 mvn install 来构建项目?还是应该在项目导入向导期间全部由 IntelliJ 完成?

编辑:我的问题是,在将项目导入 IntelliJ 后,当我打开我的库时,许多 Maven 库链接到错误的源和 javadocs。他们获取源代码和 javadocs 的文件夹确实存在,但该文件夹中不存在引用的特定 javadoc.jar 或 sources.jar 文件。

所以我认为我的 Maven 导入做错了 - 我只使用 IntelliJ 向导来做到这一点。奇怪的是,该项目仍然可以编译并运行良好,这个问题的唯一“症状”是空的 javadocs。

编辑(11 月 9 日):我尝试了@JJF 建议的方法,虽然它确实下载了丢失的 javadocs 和源文件,但它为它们添加了一个“.lastUpdated”后缀。为什么会这样?

另外,我手动重命名了 javadocs,虽然这会清除“库”窗口中的内容,但当我返回我的项目时,我的内联文档(鼠标悬停)仍然显示空文档(这是最初导致我这个问题,我为它创建了一个不同的线程here)。也许我可能在我的 SDK 文档路径中做错了什么?

运行@Nick78 描述的过程会产生以下错误:

"C:\Program Files\Java\jdk1.8.0_45\bin\java" -Dmaven.multiModuleProjectDirectory=C:\Users\misao\Documents\GitHub\apps-android-commons\commons "-Dmaven.home=C:\Program Files\apache-maven-3.3.3" "-Dclassworlds.conf=C:\Program Files\apache-maven-3.3.3\bin\m2.conf" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 14.1.5\bin" -Dfile.encoding=windows-1252 -classpath "C:\Program Files\apache-maven-3.3.3\boot\plexus-classworlds-2.5.2.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 14.1.5\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain org.codehaus.classworlds.Launcher -Didea.version=14.1.5 -DskipTests=true clean install
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building commons - Application 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ commons ---
[INFO] Deleting C:\Users\misao\Documents\GitHub\apps-android-commons\commons\target
[INFO] 
[INFO] --- android-maven-plugin:3.6.0:generate-sources (default-generate-sources) @ commons ---
[WARNING] Error injecting: com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo
java.lang.NoClassDefFoundError: Lorg/sonatype/aether/RepositorySystem;
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
    at java.lang.Class.getDeclaredFields(Class.java:1916)
    at com.google.inject.spi.InjectionPoint.getInjectionPoints(InjectionPoint.java:661)
    at com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields(InjectionPoint.java:366)
    at com.google.inject.internal.ConstructorBindingImpl.getInternalDependencies(ConstructorBindingImpl.java:165)
    at com.google.inject.internal.InjectorImpl.getInternalDependencies(InjectorImpl.java:612)
    at com.google.inject.internal.InjectorImpl.cleanup(InjectorImpl.java:568)
    at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:554)
    at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:877)
    at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:798)
    at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:281)
    at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:213)
    at com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:998)
    at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1031)
    at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:994)
    at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1044)
    at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
    at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:86)
    at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:54)
    at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:70)
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:115)
    at org.eclipse.sisu.bean.BeanScheduler$Activator.onProvision(BeanScheduler.java:176)
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:126)
    at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68)
    at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:68)
    at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:46)
    at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1009)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1059)
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1005)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:36)
    at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:81)
    at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51)
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:263)
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:255)
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:546)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:121)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.lang.ClassNotFoundException: org.sonatype.aether.RepositorySystem
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
    ... 64 more
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.075 s
[INFO] Finished at: 2015-11-09T00:38:37+13:00
[INFO] Final Memory: 13M/245M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.6.0:generate-sources (default-generate-sources) on project commons: Execution default-generate-sources of goal com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.6.0:generate-sources failed: A required class was missing while executing com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.6.0:generate-sources: Lorg/sonatype/aether/RepositorySystem;
[ERROR] -----------------------------------------------------
[ERROR] realm =    extension>com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.6.0
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/C:/Users/misao/.m2/repository/com/jayway/maven/plugins/android/generation2/android-maven-plugin/3.6.0/android-maven-plugin-3.6.0.jar
[ERROR] urls[1] = file:/C:/Users/misao/.m2/repository/com/android/tools/build/builder/0.4/builder-0.4.jar
[ERROR] urls[2] = file:/C:/Users/misao/.m2/repository/com/android/tools/sdklib/22.0/sdklib-22.0.jar
[ERROR] urls[3] = file:/C:/Users/misao/.m2/repository/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1.jar
[ERROR] urls[4] = file:/C:/Users/misao/.m2/repository/org/apache/httpcomponents/httpcore/4.1/httpcore-4.1.jar
[ERROR] urls[5] = file:/C:/Users/misao/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
[ERROR] urls[6] = file:/C:/Users/misao/.m2/repository/commons-codec/commons-codec/1.4/commons-codec-1.4.jar
[ERROR] urls[7] = file:/C:/Users/misao/.m2/repository/org/apache/httpcomponents/httpmime/4.1/httpmime-4.1.jar
[ERROR] urls[8] = file:/C:/Users/misao/.m2/repository/com/android/tools/layoutlib/layoutlib-api/22.0/layoutlib-api-22.0.jar
[ERROR] urls[9] = file:/C:/Users/misao/.m2/repository/com/android/tools/dvlib/22.0/dvlib-22.0.jar
[ERROR] urls[10] = file:/C:/Users/misao/.m2/repository/org/apache/commons/commons-compress/1.0/commons-compress-1.0.jar
[ERROR] urls[11] = file:/C:/Users/misao/.m2/repository/com/android/tools/build/builder-test-api/0.4/builder-test-api-0.4.jar
[ERROR] urls[12] = file:/C:/Users/misao/.m2/repository/com/android/tools/build/builder-model/0.4/builder-model-0.4.jar
[ERROR] urls[13] = file:/C:/Users/misao/.m2/repository/com/android/tools/common/22.0/common-22.0.jar
[ERROR] urls[14] = file:/C:/Users/misao/.m2/repository/com/google/guava/guava/13.0.1/guava-13.0.1.jar
[ERROR] urls[15] = file:/C:/Users/misao/.m2/repository/com/android/tools/sdk-common/22.0/sdk-common-22.0.jar
[ERROR] urls[16] = file:/C:/Users/misao/.m2/repository/com/android/tools/ddms/ddmlib/22.0/ddmlib-22.0.jar
[ERROR] urls[17] = file:/C:/Users/misao/.m2/repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar
[ERROR] urls[18] = file:/C:/Users/misao/.m2/repository/com/android/tools/build/manifest-merger/22.0/manifest-merger-22.0.jar
[ERROR] urls[19] = file:/C:/Users/misao/.m2/repository/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48.jar
[ERROR] urls[20] = file:/C:/Users/misao/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.jar
[ERROR] urls[21] = file:/C:/Users/misao/.m2/repository/org/sonatype/sisu/sisu-inject-bean/2.1.1/sisu-inject-bean-2.1.1.jar
[ERROR] urls[22] = file:/C:/Users/misao/.m2/repository/org/sonatype/sisu/sisu-guice/2.9.4/sisu-guice-2.9.4-no_aop.jar
[ERROR] urls[23] = file:/C:/Users/misao/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.14/plexus-interpolation-1.14.jar
[ERROR] urls[24] = file:/C:/Users/misao/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar
[ERROR] urls[25] = file:/C:/Users/misao/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar
[ERROR] urls[26] = file:/C:/Users/misao/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar
[ERROR] urls[27] = file:/C:/Users/misao/.m2/repository/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.jar
[ERROR] urls[28] = file:/C:/Users/misao/.m2/repository/emma/emma/2.1.5320/emma-2.1.5320.jar
[ERROR] urls[29] = file:/C:/Users/misao/.m2/repository/org/codehaus/plexus/plexus-archiver/2.3/plexus-archiver-2.3.jar
[ERROR] urls[30] = file:/C:/Users/misao/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[ERROR] urls[31] = file:/C:/Users/misao/.m2/repository/org/codehaus/plexus/plexus-io/2.0.6/plexus-io-2.0.6.jar
[ERROR] urls[32] = file:/C:/Users/misao/.m2/repository/org/codehaus/plexus/plexus-utils/3.0.10/plexus-utils-3.0.10.jar
[ERROR] urls[33] = file:/C:/Users/misao/.m2/repository/commons-jxpath/commons-jxpath/1.3/commons-jxpath-1.3.jar
[ERROR] urls[34] = file:/C:/Users/misao/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar
[ERROR] urls[35] = file:/C:/Users/misao/.m2/repository/org/ow2/asm/asm/4.1/asm-4.1.jar
[ERROR] urls[36] = file:/C:/Users/misao/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar
[ERROR] urls[37] = file:/C:/Users/misao/.m2/repository/org/sonatype/aether/aether-util/1.13.1/aether-util-1.13.1.jar
[ERROR] urls[38] = file:/C:/Users/misao/.m2/repository/com/github/rtyley/android-screenshot-paparazzo/1.9/android-screenshot-paparazzo-1.9.jar
[ERROR] urls[39] = file:/C:/Users/misao/.m2/repository/com/madgag/animated-gif-lib/1.0/animated-gif-lib-1.0.jar
[ERROR] urls[40] = file:/C:/Users/misao/.m2/repository/com/github/rtyley/android-screenshot-celebrity/1.8/android-screenshot-celebrity-1.8.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[maven.api, parent: null]]
[ERROR] 
[ERROR] -----------------------------------------------------: org.sonatype.aether.RepositorySystem
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/AetherClassNotFound

Process finished with exit code 1

【问题讨论】:

  • 我认为导入项目和构建项目是两个不同的操作。您面临的实际问题是什么?
  • @VladimirTikhomirov 我已经编辑了我的开场白,以附上截图来解释问题。谢谢!

标签: maven intellij-idea import build


【解决方案1】:

从命令行运行

mvn dependency:sources
mvn dependency:resolve -Dclassifier=javadoc

这将下载所有缺失的源代码和 Javadocs。见Get source JARs from Maven repository

WRT 也可以使用 IntelliJ 与运行 mvn install 构建项目:IntelliJ 将在您运行或调试应用程序时编译您的源文件。你不需要运行 maven 来编译你的源代码。如果您想说从 IntelliJ 中打包或安装项目,请转到 Maven 项目工具窗口并展开生命周期节点或插件节点,您可以通过双击您有兴趣运行的任何目标来运行 Maven 目标。

如果您右键单击其中一个目标,您可以为该目标创建一个运行配置,您可以从运行配置下拉菜单中运行该配置。

【讨论】:

  • 谢谢,我已经这样做了,但似乎仍然有问题。 :( 我在开篇文章中用截图描述了我的问题(因为我认为我不能在 cmets 中发布图像)。
【解决方案2】:

首先确保在设置中 (Top menu > File > Settings > Build, Execution, Deployment > Build Tools > Maven) IntelliJ 指向的 Maven 存储库与 M2_HOME 中定义的 Maven 安装中定义的相同。这通常是(在 Windows 中)C:\Users\Username\.m2\repository。然后在控制台中转到您的pom.xml 所在的目录并输入:mvn idea:idea(这将创建或重新创建您的 IntelliJ 项目文件)。在 IntelliJ 中确保选中 Top menu > View > Tool Buttons 下。在 IntelliJ 窗口边界的某处有一个名为 Maven Projects 的按钮单击它。在打开的对话框中单击绿色 + 并添加您的 pom.xml。之后单击 Maven 对话框左上角的重新导入按钮(蓝色指针圆圈)。然后在同一个对话框中展开your project > Lifecycle。按住ctrl 并选择cleaninstall。单击带有闪电的蓝色圆圈(跳过测试),然后单击播放按钮。也许再次重新导入(蓝色指针圆圈)。

【讨论】:

  • 嗯,这似乎与在命令行上运行 mvn install 完全相同,是吗?这会产生错误(我粘贴在我的开篇文章中)。
  • 编辑:另外,M2_HOME 环境变量不应该指向 Maven 安装,而不是指向 Maven 本地存储库吗?我的 Maven 本地存储库位于 .m2\repository 文件夹中,但我的 Maven 安装位于 Program Files 中(这是我的 M2_HOME 变量指向的位置)。
  • 当然M2_HOME必须指向Maven安装。我的意思是如果在settings.xml(在maven 的conf 目录中)没有定义本地存储库,那么它默认位于C:/Users/Your-User/.m2/repository。那么,IntelliJ 是否也指向这个存储库?你能从控制台构建项目吗?如果不是,您可能必须添加缺少源所在的远程存储库。或者可能缺少依赖项。尤其是在缺少 Lorg/sonatype/aether/RepositorySystem 的地方。
  • 是的,IntelliJ 中的“Maven 本地存储库”也指向您提到的目录。我可以看到该目录存在,并且当我运行 JJF 列出的命令时,我可以看到缺少的源代码和 javadocs 已添加到该目录中。从命令行运行 mvn install 会产生与在 IntelliJ Maven 项目窗口中运行进程相同的错误(粘贴在开篇文章中)。如何检查缺少哪些依赖项?
  • 关于你的资源和javadoc问题,也许这个插件有帮助maven.apache.org/plugin-developers/cookbook/…
猜你喜欢
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
相关资源
最近更新 更多