2009-06-12 30 views
8

Tôi mới làm quen với Maven và đang tạo dựng một công trình cho công ty của tôi. Chúng tôi không muốn kết nối với Kho lưu trữ trung tâm Maven, và chúng tôi có một cấu trúc thư mục khác cho src và mã thử nghiệm hơn là được chỉ định trong siêu pom. Tôi đã tìm ra cách tốt nhất để xử lý điều này là tạo ra một khách hàng siêu pom, nhưng tôi tự hỏi - nơi nào tôi thực sự đặt siêu pom để pom dự án của tôi có thể tham khảo nó? Liệu nó đi trong kho lưu trữ ở đâu đó? Nếu vậy, ở đâu?Maven Super POM

Cảm ơn, Jeff

Trả lời

16

Đề nghị của tôi là bạn nên tạo một POM mẹ từ đó dự án của bạn có thể lấy được các thiết lập của bạn. POM cha mẹ này chỉ đơn giản là một dự án Maven 2 khác, nhưng với kiểu "pom" thay vì "jar".

Ví dụ, bạn có thể có một pom mẹ như thế này:

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

Và một đứa trẻ của dự án có thể trông như thế này:

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

Tất cả những gì bạn khai báo trong POM mẹ tại là có sẵn trong pom trẻ em. Trong ví dụ về, dự án con sẽ tự động có sự phụ thuộc JUnit có sẵn. Làm theo cách này cũng sẽ đảm bảo rằng môi trường được tự động tìm ra so với nếu mỗi nhà phát triển sẽ phải lộn xộn xung quanh với POM siêu cài đặt Maven của họ.

3

Có lẽ bạn đã đúng, một siêu cuống là cách để đi trong tình huống này. Đối với nơi bạn đặt nó, bạn sẽ cần phải tạo một kho lưu trữ maven cục bộ và cung cấp cho các nhà phát triển quyền truy cập vào nó. Dưới đây là một số chương trình hữu ích (và miễn phí):

Khi bạn nhận được một kho lưu trữ một hoạt động, bạn sẽ cần phải có mỗi nhà phát triển sửa đổi settings.xml của họ để tham khảo các máy chủ lưu trữ mới mà bạn đã thiết lập. Siêu pom bạn tạo sẽ được triển khai trong kho lưu trữ, vì vậy khi chúng được cấu hình để sử dụng nó, khi đó maven sẽ tự động kéo siêu pom xuống.

Dưới đây là một ví dụ về một artifactory tạo tập tin 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> 
Các vấn đề liên quan