2009-09-30 162 views
3

如果我将它添加到POM,它会创建一个循环依赖项?我试过了,看起来发生了什么。这里有一些我不理解的东西。不是在构建结束时创建的战争文件。Maven循环依赖?

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>mywebapp</artifactId> 
    <version>${project.version}</version> 
    <type>war</type> 
    <scope>provided</scope> 
</dependency> 

我的目录结构是root/functest,root/mywebapp。

有效POM

[INFO] Scanning for projects... 
[INFO] Searching repository for plugin with prefix: 'help'. 
[INFO] org.grails: checking for updates from tapestry.javaforge 
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = 'ee0f52bc37051384f078f9706be9445b550ee4a6'; remote = 'a535436f42caf1ba0f9372328d2920372f30c842' - RETRYING 
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = 'ee0f52bc37051384f078f9706be9445b550ee4a6'; remote = 'a535436f42caf1ba0f9372328d2920372f30c842' - IGNORING 
[INFO] org.apache.maven.plugins: checking for updates from tapestry.javaforge 
[INFO] org.codehaus.mojo: checking for updates from tapestry.javaforge 
[INFO] artifact org.apache.maven.plugins:maven-help-plugin: checking for updates from tapestry.javaforge 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building functional-tests 
[INFO] task-segment: [help:effective-pom] (aggregator-style) 
[INFO] ------------------------------------------------------------------------ 
[INFO] [help:effective-pom] 
[INFO] 
Effective POMs, after inheritance, interpolation, and profiles are applied: 

<?xml version="1.0" encoding="UTF-8"?> 
<!-- ====================================================================== --> 
<!--                  --> 
<!-- Generated by Maven Help Plugin on 9/30/09 10:41 AM      --> 
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/    --> 
<!--                  --> 
<!-- ====================================================================== --> 

<!-- ====================================================================== --> 
<!--                  --> 
<!-- Effective POM for project 'com.mycompany:functest:pom:1.0-SNAPSHOT' --> 
<!--                  --> 
<!-- ====================================================================== --> 

<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> 
    <parent> 
    <artifactId>myapp</artifactId> 
    <groupId>com.mycompany</groupId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 
    <groupId>com.mycompany</groupId> 
    <artifactId>functest</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <name>functional-tests</name> 
    <url>http://www.mycompany.com/functest</url> 
    <organization> 
    <name>My Company Inc</name> 
    <url>http://www.mycompany.com</url> 
    </organization> 
    <developers> 
    <developer> 
     <id>john.doe</id> 
     <name>John Doe</name> 
     <email>[email protected]</email> 
    </developer> 
    </developers> 
    <build> 
    <sourceDirectory>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\src\main\java</sourceDirectory> 
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory> 
    <testSourceDirectory>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\src\it</testSourceDirectory> 
    <outputDirectory>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\target\classes</outputDirectory> 
    <testOutputDirectory>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\target\test-classes</testOutputDirectory> 
    <resources> 
     <resource> 
     <mergeId>resource-0</mergeId> 
     <directory>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\src\main\resources</directory> 
     </resource> 
    </resources> 
    <testResources> 
     <testResource> 
     <mergeId>resource-1</mergeId> 
     <directory>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\src\test\resources</directory> 
     </testResource> 
    </testResources> 
    <directory>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\target</directory> 
    <finalName>functest-1.0-SNAPSHOT</finalName> 
    <pluginManagement> 
     <plugins> 
     <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.3</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2-beta-2</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-clean-plugin</artifactId> 
      <version>2.2</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.0.2</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.0</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-deploy-plugin</artifactId> 
      <version>2.4</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-ear-plugin</artifactId> 
      <version>2.3.1</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-ejb-plugin</artifactId> 
      <version>2.1</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-install-plugin</artifactId> 
      <version>2.2</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.2</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <version>2.5</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-plugin-plugin</artifactId> 
      <version>2.4.3</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-rar-plugin</artifactId> 
      <version>2.2</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-release-plugin</artifactId> 
      <version>2.0-beta-8</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.3</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-site-plugin</artifactId> 
      <version>2.0-beta-7</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-source-plugin</artifactId> 
      <version>2.0.4</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.4.3</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1-alpha-2</version> 
     </plugin> 
     </plugins> 
    </pluginManagement> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.0.2</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>testCompile</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <source>1.5</source> 
      <target>1.5</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
      <phase>integration-test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <suiteXmlFiles> 
      <suiteXmlFile>src/it/testng.xml</suiteXmlFile> 
      </suiteXmlFiles> 
      <parallel>true</parallel> 
      <threadCount>10</threadCount> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.codehaus.cargo</groupId> 
     <artifactId>cargo-maven2-plugin</artifactId> 
     <version>1.0.1-alpha-1</version> 
     <executions> 
      <execution> 
      <id>start-container</id> 
      <phase>pre-integration-test</phase> 
      <goals> 
       <goal>start</goal> 
       <goal>deploy</goal> 
      </goals> 
      <configuration> 
       <deployer> 
       <deployables> 
        <deployable> 
        <groupId>com.mycompany</groupId> 
        <artifactId>mywebapp</artifactId> 
        <type>war</type> 
        <pingURL>http://localhost:8080/mywebapp/index.html</pingURL> 
        <pingTimeout>300000</pingTimeout> 
        <properties> 
         <context>mywebapp</context> 
        </properties> 
        </deployable> 
       </deployables> 
       </deployer> 
      </configuration> 
      </execution> 
      <execution> 
      <id>stop-container</id> 
      <phase>post-integration-test</phase> 
      <goals> 
       <goal>stop</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <wait>false</wait> 
      <container> 
      <containerId>tomcat5x</containerId> 
      <zipUrlInstaller> 
       <url>http://www.apache.org/dist/tomcat/tomcat-5/v5.5.28/bin/apache-tomcat-5.5.28.zip</url> 
       <installDir>${installDir}</installDir> 
      </zipUrlInstaller> 
      <output>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\target/tomcat5x.log</output> 
      <log>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\target/cargo.log</log> 
      </container> 
      <configuration> 
      <home>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\target/tomcat5x/container</home> 
      <properties> 
       <cargo.logging>high</cargo.logging> 
       <cargo.servlet.port>8080</cargo.servlet.port> 
      </properties> 
      </configuration> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-help-plugin</artifactId> 
     <version>2.1</version> 
     </plugin> 
    </plugins> 
    </build> 
    <repositories> 
    <repository> 
     <releases> 
     <enabled>false</enabled> 
     </releases> 
     <snapshots /> 
     <id>public-snapshots</id> 
     <url>http://public-snapshots</url> 
    </repository> 
    <repository> 
     <releases /> 
     <snapshots /> 
     <id>openqa-releases</id> 
     <url>http://nexus.openqa.org/content/repositories/releases</url> 
    </repository> 
    <repository> 
     <id>openqa</id> 
     <url>http://maven.openqa.org</url> 
    </repository> 
    <repository> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>central</id> 
     <name>Maven Repository Switchboard</name> 
     <url>http://repo1.maven.org/maven2</url> 
    </repository> 
    </repositories> 
    <pluginRepositories> 
    <pluginRepository> 
     <releases> 
     <enabled>false</enabled> 
     </releases> 
     <snapshots /> 
     <id>public-snapshots</id> 
     <url>http://public-snapshots</url> 
    </pluginRepository> 
    <pluginRepository> 
     <releases /> 
     <snapshots /> 
     <id>openqa-plugin</id> 
     <url>http://nexus.openqa.org/content/repositories/releases</url> 
    </pluginRepository> 
    <pluginRepository> 
     <releases /> 
     <snapshots /> 
     <id>another-plugin</id> 
     <url>http://repo1.maven.org/maven2</url> 
    </pluginRepository> 
    <pluginRepository> 
     <releases /> 
     <id>codehaus.snapshots</id> 
     <url>http://snapshots.repository.codehaus.org/</url> 
    </pluginRepository> 
    <pluginRepository> 
     <id>mortbay.repo</id> 
     <url>http://www.mortbay.org/maven2/snapshot</url> 
    </pluginRepository> 
    <pluginRepository> 
     <id>tapestry.javaforge</id> 
     <url>http://howardlewisship.com/repository</url> 
    </pluginRepository> 
    <pluginRepository> 
     <releases> 
     <updatePolicy>never</updatePolicy> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>central</id> 
     <name>Maven Plugin Repository</name> 
     <url>http://repo1.maven.org/maven2</url> 
    </pluginRepository> 
    </pluginRepositories> 
    <dependencies> 
    <dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>mywebapp</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium.server</groupId> 
     <artifactId>selenium-server</artifactId> 
     <version>1.0.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium.client-drivers</groupId> 
     <artifactId>selenium-java-client-driver</artifactId> 
     <version>1.0.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.testng</groupId> 
     <artifactId>testng</artifactId> 
     <version>5.1</version> 
     <classifier>jdk15</classifier> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    <reporting> 
    <outputDirectory>C:\Documents and Settings\ric\AutoSmokeTest\steps\step7\functest\target/site</outputDirectory> 
    </reporting> 
</project> 

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 3 seconds 
[INFO] Finished at: Wed Sep 30 10:41:00 CEST 2009 
[INFO] Final Memory: 7M/13M 
[INFO] ------------------------------------------------------------------------ 
+1

小建议清理你的pom,让你的生活在未来变得轻松。 如果您确实需要插件管理,请将其移至父pom。移动存储库和插件存储库。例如,如果您需要更改插件版本,则只需在一个位置更改插件版本即可。 – jassuncao 2009-09-30 09:05:10

回答

4

它只会创建一个循环依赖如果mywebapp取决于functest(或传递地依赖于它)。从名字我猜想functest是一个测试组件,所以不存在这种依赖。

正如你所看到的,它是有效的特性代入依赖声明,如果它导致循环,Maven会构建失败。

我想围绕你的困惑“是不是在构建结束时创建war文件。”是因为你期望构建失败,因为functest是在mywebapp之前构建的?请记住,Maven的访问本地和远程存储库,所以mywebapp任何以前的版本的结果将是在仓库中。如果是这种情况,请尝试从您的本地/远程存储库中删除mywebapp,我怀疑你会看到构建失败,由于未解决的依赖。

+0

这样做,我忘记了本地存储库的作用。非常感谢。祝你今天愉快。 – Ric 2009-09-30 10:53:53

1

如果我将此添加到POM,它会创建一个循环依赖项?

如果你指的是聚甲醛是functest模块的POM,添加依赖于mywebapp模块将建立一个循环依赖只有在mywebapp模块已经依赖于functest模块(这不应该是这里的情况)正如Rich在另一个答案中所述。

我已经尝试过了,似乎什么事情发生。

你确定吗?您的多模块项目是否定义良好?你能告诉我们父母吗?您能否提供从父项启动maven时获得的跟踪?

[...]不是在构建结束时创建的war文件吗?

那么......这取决于你在做什么。

如果您严格遵循Automated Smoke Tests With Selenium, Cargo, TestNG and Maven,请注意,作者并没有真正涵盖多模块项目设置(我不是说他没有这样做,我只是说他不覆盖那部分),但只是功能测试项目设置。他总是从functest目录启动maven,而不是作为父pom的反应堆,并且在步骤7中通过货物部署的webapp被视为“外部”依赖。

现在,如果您正在开发自己的web应用程序,那么在运行功能测试之前构建它真的很有意义。实际上,这将是“推荐”的方法。在你的情况,一定要申报mywebappfunctest依赖和这两个项目作为父POM,即类似的东西的模块声明(如果父POM是在一个父目录):

... 
    <modules> 
    <module>mywebapp</module> 
    <module>functest</module> 
    </modules> 
    ...