2009-06-12 18 views
8

Maven'de yeni ve şirketim için bir yapı oluşturmaya çalışıyorum. Maven Central Repository'e bağlanmak istemiyoruz, ve super pom'da belirtilenden daha fazla src ve test kodu için farklı bir dizin yapımız var. Bunu başarmanın en iyi yolunun bir müşteri süper pompası yaratmak olduğunu düşündüm, ama merak ediyorum - süper pompayı nereye koyacağım, böylece proje pomp'larım buna referans verebilir? Depoda bir yere mi gidiyor? Öyleyse nerede?Maven Super POM

sayesinde Jeff

cevap

16

Önerim size projeleri ayarlarınızı türetebileceği bir ebeveyn POM oluşturmaktır. Bu ana POM sadece başka bir Maven 2 projesidir, ancak "kavanoz" yerine "pom" tipi ile. Üst POM beyan

<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> 

Her şey şimdi: aşağıdaki gibi görünebilir

<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> 

Ve projenin bir çocuk:

Örneğin, böyle bir ebeveyn pom olabilir çocuk pom içinde mevcut. Örnekle ilgili olarak, çocuk projesi otomatik olarak JUnit bağımlılığını kullanacaktır. Bu şekilde yapılması, her geliştiricinin Maven kurulumunun süper POM'siyle uğraşmak zorunda kalması durumunda çevreye otomatik olarak karar vermesini sağlayacaktır.

3

Muhtemelen doğru, bu durumda bir süper-pom yolu. Nereye koyduğunuza göre, yerel bir maven deposu oluşturmanız ve geliştiricilere erişim sağlamanız gerekecektir. İşte bazı yararlı (ve ücretsiz) programları şunlardır:

kez Bir depoyu çalışır duruma getirdiğinizde, her geliştiricinin, kurulumunuz olan yeni depo sunucusuna referans vermek için settings.xml dosyasını değiştirmesi gerekir. Oluşturduğunuz süper pompa depoda konuşlandırılacak, bu yüzden bunları kullanacak şekilde yapılandırıldıktan sonra, maven süper pompayı otomatik olarak aşağı çekecektir.

 
<?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> 
: Burada

bir artifactory oluşturulan settings.xml dosyasını bir örnektir