it-swarm-vi.tech

Tôi có thể thêm kho lưu trữ maven trong dòng lệnh không?

Tôi biết rằng tôi có thể thêm kho lưu trữ maven để tìm nạp các phụ thuộc trong ~/.m2/settings.xml. Nhưng có thể thêm một kho lưu trữ bằng cách sử dụng dòng lệnh, đại loại như:

mvn install -Dmaven.repository=http://example.com/maven2

Lý do tôi muốn làm điều này là vì tôi đang sử dụng một công cụ tích hợp liên tục, nơi tôi có toàn quyền kiểm soát các tùy chọn dòng lệnh mà nó sử dụng để gọi maven, nhưng việc quản lý tệp settings.xml cho người dùng chạy công cụ tích hợp là một chút của một rắc rối.

62
Sindri Traustason

Bạn có thể làm điều này nhưng có lẽ bạn nên làm điều đó trong POM như những người khác đã nói.

Trên dòng lệnh, bạn có thể chỉ định một thuộc tính cho kho lưu trữ cục bộ và một kho lưu trữ khác cho các kho lưu trữ từ xa. Kho lưu trữ từ xa sẽ có tất cả các cài đặt mặc định

Ví dụ dưới đây chỉ định hai kho lưu trữ từ xa và kho lưu trữ cục bộ tùy chỉnh.

mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo 
  -Dmaven.repo.local="c:\test\repo"
69
Rich Seller

Một trong những mục tiêu của Mô hình đối tượng dự án Maven't (POM) là nắm bắt tất cả thông tin cần thiết để tái tạo một cách đáng tin cậy một vật phẩm, do đó việc vượt qua các cài đặt ảnh hưởng đến việc tạo ra tạo tác được khuyến khích mạnh mẽ.

Để đạt được mục tiêu của bạn, bạn có thể kiểm tra tệp cài đặt cấp độ người dùng của mình với từng dự án và sử dụng tùy chọn -s (hoặc --sinstall) để chuyển nó vào bản dựng.

6
ddimitrov

Tôi không chắc chắn nếu bạn có thể làm điều đó bằng cách sử dụng dòng lệnh. Mặt khác, bạn có thể thêm các kho lưu trữ trong pom.xml như trong ví dụ sau. Sử dụng phương pháp này, bạn không cần thay đổi tệp ~/.m2/settings.xml.

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
    ...
    <repositories>
            <repository>
                <id>MavenCentral</id>
                <name>Maven repository</name>
                <url>http://repo1.maven.org/maven2</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
...
            <repository>
                <id>Codehaus Snapshots</id>
                <url>http://snapshots.repository.codehaus.org/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </repository>
        </repositories>

    ...

        <pluginRepositories>
            <pluginRepository>
                <id>Apache.snapshots</id>
                <name>Apache Snapshot Repository</name>
                <url>
                    http://people.Apache.org/repo/m2-snapshot-repository
                </url>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </pluginRepository>
            <pluginRepository>
                <id>Codehaus Snapshots</id>
                <url>http://snapshots.repository.codehaus.org/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </pluginRepository>
        </pluginRepositories>

    ...

    </project>
5
Jorge Ferreira

Tôi sẽ giả sử ở đây rằng bạn đang hỏi điều này bởi vì thỉnh thoảng bạn muốn thêm kho lưu trữ của bên thứ 3 mới vào các bản dựng của mình. Tôi có thể sai tất nhiên ... :)

Đặt cược tốt nhất của bạn trong trường hợp này là sử dụng proxy được quản lý như artifactory hoặc nexus. Sau đó thực hiện thay đổi một lần trong tệp settings.xml để thiết lập điều này như một tấm gương cho thế giới.

Bất kỳ repos bên thứ 3 nào bạn cần thêm từ thời điểm đó trở đi đều có thể được xử lý thông qua proxy.

3
Kevin Wright

Như @Jorge Ferreira đã nói, hãy đặt các định nghĩa kho lưu trữ của bạn vào tệp pom.xml. Sử dụng hồ sơ adittionally để chọn kho lưu trữ để sử dụng thông qua dòng lệnh:

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1
3
Eduard Wirch

Tôi chưa thực sự sử dụng maven 2 trước đây, hệ thống của chúng tôi vẫn hoạt động trên maven 1.x vì một số vấn đề với maven 2.

Tuy nhiên, nhìn vào tài liệu cho maven 2, dường như không có thuộc tính Hệ thống cụ thể nào như thế. Tuy nhiên, bạn có thể có thể xây dựng một trong các poms/cài đặt của mình bằng các thuộc tính Hệ thống. Xem phần thuộc tính của Hệ thống này http://maven.Apache.org/sinstall.html

Vì vậy, bạn có $ {maven.reposeective} trong tệp cài đặt của mình và sau đó sử dụng -Dmaven.reposeective như bạn làm ở trên.

Tôi không chắc chắn nếu điều này sẽ làm việc, nhưng với một số điều chỉnh tôi chắc chắn bạn có thể đưa ra một cái gì đó.

2
Henry B

Tạo một POM có các cài đặt kho lưu trữ mà bạn muốn và sau đó sử dụng phần tử cha trong các POM dự án của bạn để kế thừa các kho lưu trữ bổ sung. Việc sử dụng POM "tổ chức" có một số lợi ích khác khi một nhóm dự án thuộc về một nhóm.

1
Steve Moyer