【问题标题】:PlayN skeleton project html module can't find core module in maven?PlayN骨架项目html模块在maven中找不到核心模块?
【发布时间】:2012-01-02 01:03:02
【问题描述】:

基于 PlayN Getting Started wiki page,我在 eclipse 中创建了一个框架项目(称为 GuiPoc)。我设法使 guipoc-html 项目成功编译(使用Google -> GWT Compile),最终编译为Run as -> Web Application。我尝试根据 wiki 使用 guipoc/html 目录(在 cygwin 中)中的 mvn gae:run,并得到以下输出:

[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building GuiPoc HTML 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-gae-plugin:0.9.2:run (default-cli) @ guipoc-html >>>
[WARNING] The POM for com.mydomain.mynamespace:guipoc-core:jar:0.0.1-SNAPSHOT is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.619s
[INFO] Finished at: Sun Jan 01 20:05:29 VET 2012
[INFO] Final Memory: 8M/121M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project guipoc-html: Could not resolve dependencies for project com.mydomain.mynamespace:guipoc-html:war:0.0.1-SNAPSHOT: Failure to find com.mydomain.mynamespace:guipoc-core:jar:0.0.1-SNAPSHOT in http://forplay.googlecode.com/svn/mavenrepo was cached in the local repository, resolution will not be reattempted until the update interval of forplay-legacy has elapsed or updates are forced -> [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/DependencyResolutionException

实际问题: 我不明白为什么它在系统存储库而不是本地目录中寻找依赖项。我究竟做错了什么?我需要更改 pom.xml 文件中的某些内容吗?在我的 C:\Users\MyName.m2 目录中创建一个 settings.xml 并在那里设置一些东西?

这里是guipoc/html/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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.mydomain.mynamespace</groupId>
    <artifactId>guipoc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>guipoc-html</artifactId>
  <packaging>war</packaging>
  <name>GuiPoc HTML</name>

  <properties>
    <gwt.module>com.mydomain.mynamespace.GuiPoc</gwt.module>
    <gwt.name>guipoc</gwt.name>
    <!-- Desired Google App Engine SDK version -->
    <gae.version>1.6.0</gae.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>com.mydomain.mynamespace</groupId>
      <artifactId>guipoc-core</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>com.googlecode.playn</groupId>
      <artifactId>playn-html</artifactId>
      <version>${playn.version}</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>gwt-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.8</version>
        <configuration>
          <downloadSources>true</downloadSources>
          <downloadJavadocs>false</downloadJavadocs>
          <wtpversion>2.0</wtpversion>
          <additionalBuildcommands>
            <buildCommand>
              <name>com.google.gwt.eclipse.core.gwtProjectValidator</name>
            </buildCommand>
          </additionalBuildcommands>
          <additionalProjectnatures>
            <projectnature>com.google.gwt.eclipse.core.gwtNature</projectnature>
            <projectnature>com.google.appengine.eclipse.core.gaeNature</projectnature>
          </additionalProjectnatures>
        </configuration>
      </plugin>
      <plugin>
        <groupId>net.kindleit</groupId>
        <artifactId>maven-gae-plugin</artifactId>
        <version>0.9.2</version>
        <dependencies>
          <!--
            Declare explicit dependency on gae-runtime here,
            so we can specify the App Engine SDK version
          -->
          <dependency>
            <groupId>net.kindleit</groupId>
            <artifactId>gae-runtime</artifactId>
            <version>${gae.version}</version>
            <type>pom</type>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
</project>

这里是guipoc/core/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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.mydomain.mynamespace</groupId>
    <artifactId>guipoc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>guipoc-core</artifactId>
  <packaging>jar</packaging>
  <name>GuiPoc Core</name>

  <dependencies>
    <dependency>
      <groupId>com.googlecode.playn</groupId>
      <artifactId>playn-core</artifactId>
      <version>${playn.version}</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
      </plugin>
    </plugins>

    <resources>
      <!-- include the source files in our main jar for use by GWT -->
      <resource>
        <directory>${project.build.sourceDirectory}</directory>
      </resource>
      <!-- and continue to include our standard resources -->
      <resource>
        <directory>${basedir}/src/main/resources</directory>
      </resource>
    </resources>
  </build>
</project>

这里是guipoc/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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.googlecode.playn</groupId>
    <artifactId>playn-project</artifactId>
    <version>1.0.3</version>
  </parent>

  <groupId>com.mydomain.mynamespace</groupId>
  <artifactId>guipoc</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>GuiPoc Metaproject</name>

  <properties>
    <playn.version>1.0.3</playn.version>
  </properties>

  <modules>
    <module>core</module>
    <module>java</module>
    <module>html</module>
    <module>android</module>
  </modules>
  <dependencies>
    <dependency>
        <groupId>com.sun</groupId>
        <artifactId>tools</artifactId>
        <version>1.6</version>
        <scope>system</scope>
        <systemPath>C:\Program Files\Java\jdk1.7.0_02\lib\tools.jar</systemPath>
    </dependency>
  </dependencies>
</project>

【问题讨论】:

    标签: google-app-engine maven playn


    【解决方案1】:

    不幸的是,Maven 对多模块项目不太聪明。一个标准的 PlayN 项目(包括你的)具有以下模块结构:

    top
    +- core
    +- html (depends on core)
    +- java (depends on core)
    +- android, flash, etc.
    

    当您在 top 目录中并调用 Maven 时,它会读取所有子模块 POM 并“了解”所有这些 POM,并将正确设置类路径,以便它们在以下情况下看到适当的 classes 目录编译并运行。

    但是如果你进入,比如说,html 目录并在那里调用 Maven,它就不再“知道”所有的子模块。它所知道的只是html POM,当它看到其他任何东西的依赖项(如本例中的core 模块)时,它会执行标准的依赖项解析过程,即:

    1. 检查本地 Maven 存储库~/.m2/repository
    2. 检查 POM 中明确指定的存储库。
    3. 检查 Maven 中心。

    当您想在其中一个子模块项目中运行命令时,您必须安排从顶级项目中执行此操作。这就是为什么从命令行进行测试需要从顶级目录运行mvn test -P test-javamvn test -P test-html,而不是直接进入javahtml 目录并运行mvn test

    不幸的是,我们用来从命令行测试 Java 或 HTML 子模块的技巧不适用于gae:run。因此,在这种情况下,您必须通过在调用 gae:run 之前首先将项目工件安装到本地 Maven 存储库中来解决 Maven 的限制(实际上,每次您想使用 gae:run 进行测试时都这样做。这样做是这样完成的:

    cd top
    mvn install
    cd html
    mvn gae:run
    

    如果 Maven 足够聪明,能够检测到它在子模块目录中运行并自动解析同级依赖项,就像从顶级项目目录调用 Maven 一样,那就太好了。唉,smart 是一个形容词,在谈论 Maven 时很少适用。

    【讨论】:

    • 在安装正确的 Android SDK 版本和运行 mvn gae:unpack 以下载适当的 appengine SDK 之后,这最终奏效了。非常感谢。
    猜你喜欢
    • 2016-01-12
    • 2021-04-04
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2017-11-26
    • 2021-04-02
    • 1970-01-01
    • 2018-10-16
    相关资源
    最近更新 更多