我使用maven来构建一个多模块项目.我的模块2依赖于编译范围的模块1 src和测试范围中的模块1测试.
第2单元 -
<dependency>
<groupId>blah</groupId>
<artifactId>MODULE1</artifactId>
<version>blah</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这很好用.假设我的模块3依赖于Module1 src并在编译时进行测试.
第3单元 -
<dependency>
<groupId>blah</groupId>
<artifactId>MODULE1</artifactId>
<version>blah</version>
<classifier>tests</classifier>
<scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当我运行时mvn clean install
,我的构建运行到模块3,在模块3处失败,因为它无法解析模块1测试依赖性.然后我mvn install
单独对模块3进行操作,返回并mvn install
在我的父pom上运行以使其构建.我怎样才能解决这个问题?
我test-jar
在多模块项目中使用依赖项时遇到问题.例如,当我声明cleartk-syntax
模块依赖于cleartk-token
模块时test-jar
(完整代码在这里):
<modelVersion>4.0.0</modelVersion>
<groupId>org.cleartk</groupId>
<artifactId>cleartk-syntax</artifactId>
<version>0.5.0-SNAPSHOT</version>
<name>cleartk-syntax</name>
...
<dependencies>
...
<dependency>
<groupId>org.cleartk</groupId>
<artifactId>cleartk-token</artifactId>
<version>0.7.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
如果我mvn compile
使用maven 2 运行,我会收到以下错误:
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) org.cleartk:cleartk-token:test-jar:tests:0.7.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
如果我使用maven 3我收到错误:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.654s
[INFO] Finished at: Mon Jan 24 21:19:17 CET 2011
[INFO] Final Memory: 16M/81M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Google App Engine 创建一个由多个Google Modules组成的项目。如何设置我的项目(使用 Maven),以便我可以跨模块共享源代码,例如 Objectify 对象模型定义、共享实用程序代码和单元测试代码?
我希望答案很简单,并且我可以按照以下答案中的建议使用 Maven:
但是,我担心 Google App Engine 模块可能有一些特殊之处,使它们与 Maven 模块不同。然后也许上面的方法行不通。
作为我担心的一个例子,请注意Google 说“虽然 Java EE 支持 WAR 文件,但模块配置仅使用解压的 WAR 目录。” 然而,上面给出的一些解决方案建议将共享代码打包到 JAR 文件中。我意识到 WAR 和 JAR 是不同的,但我担心我会浪费时间尝试做一些不能工作的事情。
关于如何在 Google App Engine 模块之间共享代码的任何建议?
我在多个模块之间共享 src/测试类,其方式与附加测试指南和以下问题中描述的方式类似。
所以,我有以下 pom.xml 依赖项:
<dependency>
<groupId>com.myco.app</groupId>
<artifactId>foo</artifactId>
</dependency>
<dependency>
<groupId>com.myco.app</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是,与上面的问题相反,在附加测试 jar 时,我不想指定特定的测试 jar 版本。如编译级别依赖项所示:
<dependency>
<groupId>com.myco.app</groupId>
<artifactId>foo</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我的 pom.xml 会出现错误,并显示有关缺少版本的消息。为什么会出现这种情况呢?为什么我可以指定没有版本的依赖项,但不能指定 test-jar 依赖项?有没有办法克服这个问题并使测试 jar 使用它能找到的最新 jar?