2009-06-12 106 views
8

我是Maven的新手,正致力於爲我的公司創建一個構建。我們不想連接到Maven Central Repository,我們對src和測試代碼有不同的目錄結構,而不是super pom中指定的目錄結構。我認爲處理這個問題的最好方法是創建一個客戶超級POM,但我想知道 - 我在哪裏放置超級POM,以便我的項目可以參考它?它是否在版本庫中?如果是這樣,在哪裏?Maven超級POM

感謝, 傑夫

回答

16

我的建議是,你創建父POM從哪個項目可以得到您的設置。這個父母POM只是另一個Maven 2項目,但是類型是「pom」而不是「jar」。

例如,你可以有這樣的父POM:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.company.projectname</groupId> 
    <artifactId>projectname</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0</version> 
    <name>projectname</name> 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.5</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
    <properties> 
     <superprop1>this property is available in all child projects</superprop1> 
     <superprop2>this property is available in all child projects</superprop2> 
     <superprop3>this property is available in all child projects</superprop3> 
    </properties> 
</project> 

而該項目的孩子看起來是這樣的:你在父POM聲明

<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"> 
    <parent> 
     <artifactId>projectname</artifactId> 
     <groupId>com.company.projectname</groupId> 
     <version>1.0</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion>   
    <artifactId>child-project</artifactId> 
    <packaging>jar</packaging> 
    <name>child-project</name> 
    <description> 
     My child project 
    </description> 
</project> 

一切現在可在兒童絨球。在這個例子中,子項目將自動具有JUnit依賴項。這樣做也將確保環境被自動計算出來,相比之下,如果每個開發人員都不得不混淆他們的Maven安裝的超級POM。

3

你可能是對的,在這種情況下,超級pom就是要走的路。至於你把它放在哪裏,你需要創建一個本地的maven倉庫,並讓開發者訪問它。以下是一些有用的(而且免費)節目:

一旦您將存儲庫運行起來,您需要讓每位開發人員修改其settings.xml以引用您已設置的新存儲庫服務器。你創建的超級pom將被部署在倉庫中,所以一旦它們被配置使用它,maven就會自動將超級pom拉下來。

下面是一個artifactory的生成settings.xml文件的一個例子:

 
<?xml version="1.0" encoding="UTF-8"?> 
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <profiles> 
    <profile> 
     <repositories> 
     <repository> 
      <snapshots> 
      <enabled>false</enabled> 
      </snapshots> 
      <id>central</id> 
      <name>all</name> 
      <url>https://server.mycompany.com/artifactory/all</url> 
     </repository> 
     <repository> 
      <snapshots /> 
      <id>snapshots</id> 
      <name>all</name> 
      <url>https://server.mycompany.com/artifactory/all</url> 
     </repository> 
     </repositories> 
     <pluginRepositories> 
     <pluginRepository> 
      <snapshots> 
      <enabled>false</enabled> 
      </snapshots> 
      <id>central</id> 
      <name>all</name> 
      <url>https://server.mycompany.com/artifactory/all</url> 
     </pluginRepository> 
     <pluginRepository> 
      <snapshots /> 
      <id>snapshots</id> 
      <name>all</name> 
      <url>https://server.mycompany.com/artifactory/all</url> 
     </pluginRepository> 
     </pluginRepositories> 
     <id>artifactory</id> 
    </profile> 
    </profiles> 
    <activeProfiles> 
    <activeProfile>artifactory</activeProfile> 
    </activeProfiles> 
</settings>