2009-12-13 31 views
108

Tôi có thể cài đặt một artifact bởi cài đặt: cài đặt file, nhưng làm thế nào tôi có thể tải về sau đó, ví dụ:Làm cách nào để tải xuống một tạo phẩm Maven cụ thể trong một dòng lệnh?

mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST 

bất kỳ ý tưởng?

+8

Hãy coi chừng plugin muốn 'repoUrl', mặc dù tài liệu có nội dung 'repositoryUrl'. Nó có thể lái xe u điên như nó đã làm với tôi! – zakmck

+0

tài liệu (http: //maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html) hiển thị cả tham số xml ( ...) và thuộc tính người dùng dòng lệnh (mvn ... -DrepoUrl = ".. . "). Ví dụ cụ thể này không được chấp nhận, vì vậy đừng lo lắng; bây giờ nó bây giờ là remoteRepositories thống nhất (trong cả hai cách sử dụng); nhưng lưu ý rằng tham số "đích" là thuộc tính người dùng "-Ddest = ..."; ví dụ => mvn org.apache.maven.plugins: maven-dependency-plugin: 2.5.1: get -DremoteRepositories = repo.maven.apache.org -Dartifact = org.apache.ant: ant: 1.8.1 -Ddest = ant-1.8.1.jar (kết quả: ant-1.8.1.jar trong thư mục hiện tại) – michael

Trả lời

117

Bạn có thể sử dụng số maven dependency plugin có mục tiêu dependency:get đẹp từ phiên bản 2.1. Không cần cho một pom, mọi thứ xảy ra trên dòng lệnh.

Để đảm bảo để tìm mục tiêu dependency:get, bạn cần phải nói cho rõ ràng maven sử dụng phiên bản 2.1, nghĩa là bạn cần phải sử dụng tên đầy đủ của các plugin, bao gồm các phiên bản:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get \ 
    -DrepoUrl=url \ 
    -Dartifact=groupId:artifactId:version 

CẬP NHẬT: Với phiên bản Maven cũ hơn (trước 2.1), bạn có thể chạy dependency:get bình thường (không sử dụng tên và phiên bản đầy đủ) bằng cách buộc bản sao của maven sử dụng phiên bản plugin nhất định.

Điều này có thể được thực hiện như sau:

1. Thêm dòng sau trong phần tử <settings> của ~/.m2/settings.xml tập tin của bạn:

<usePluginRegistry>true</usePluginRegistry> 

2. Thêm tập tin ~/.m2/plugin-registry.xml với các nội dung sau :

<?xml version="1.0" encoding="UTF-8"?> 
<pluginRegistry xsi:schemaLocation="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0 http://maven.apache.org/xsd/plugin-registry-1.0.0.xsd" 
xmlns="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <useVersion>2.1</useVersion> 
     <rejectedVersions/> 
    </plugin> 
    </plugins> 
</pluginRegistry> 

Nhưng điều này dường như không hoạt động nữa với maven 2.1/2.2. Trên thực tế, theo số Introduction to the Plugin Registry, các tính năng của plugin-registry.xml đã được thiết kế lại (cho tính di động) và đăng ký plugin hiện đang ở trạng thái nửa không hoạt động trong Maven 2. Vì vậy, tôi nghĩ rằng chúng ta phải sử dụng tên dài cho bây giờ (khi sử dụng các plugin mà không có một pom, đó là ý tưởng đằng sau dependency:get).

+1

Có, và tôi đã có cùng độ phân giải bằng cách sử dụng sự phụ thuộc: nhận được mục tiêu. phụ thuộc mvn: get -Dartifact = org.apache.archiva: archiva-webapp: MỚI NHẤT: war -DrepoUrl = http: //repository.sonatype.org/content/repositories/central/ Sự bất tiện duy nhất là tôi phải cung cấp tùy chọn repoUrl. Thông tin của bạn thực sự hữu ích, tôi đang sử dụng mvn 2.2.1 (rdebian-1) và tôi không chạm vào pluginRegistry. Cảm ơn. –

+2

mục tiêu "get" này dường như "chỉ hoạt động" một lần nữa (không cần cấu hình thêm/hacking yêu cầu; plugin 2.5.1, mvn 3.0.4): = example => mvn org.apache.maven.plugins: maven-dependency-plugin : 2.5.1: get -DremoteRepositories = http: //repo.maven.apache.org -Dartifact = org.apache.ant: ant: 1.8.1 -Ddest = ant-1.8.1.jar – michael

+0

Sự khác biệt giữa nhận và cài đặt? Cả hai đều không tìm nạp repo maven địa phương của bạn? --chỉnh sửa: chờ đợi, không, tôi nhận được nó ngay bây giờ; cài đặt là cho * của bạn * deps địa phương được sao chép vào repo m2 địa phương, lấy lấy chúng từ xa. – Chris2048

0

Lệnh:

mvn install:install-file 

thường installs artifact trong kho địa phương của bạn, vì vậy bạn không cần phải tải về nó. Tuy nhiên, nếu bạn muốn chia sẻ phần tạo tác của mình với người khác, bạn sẽ cần phải triển khai tạo phẩm cho một kho lưu trữ trung tâm, xem deploy plugin để biết thêm chi tiết.

Ngoài ra, thêm dependency vào POM của bạn sẽ tự động tìm nạp bất kỳ tạo tác của bên thứ ba nào bạn cần khi bạn tạo dự án của mình. I E. Thao tác này sẽ tải xuống phần tạo tác từ kho lưu trữ trung tâm.

60

Với phiên bản mới nhất (2.8) của Maven Dependency Plugin, tải một artifact từ Maven Trung Repository cũng đơn giản như:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]] 

nơi groupId:artifactId:version, vv là những Maven coordinates

Một ví dụ, thử nghiệm với Maven 2.0.9, Maven 2.2.1 và Maven 3.0.4:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=org.hibernate:hibernate-entitymanager:3.4.0.GA:jar:sources 

(Nhờ Pascal Thivent cho việc cung cấp wonderful answer mình ở nơi đầu tiên tôi thêm câu trả lời khác, bởi vì nó sẽ không phù hợp trong một chú thích và nó sẽ là quá rộng cho lần chỉnh sửa..)

+0

Tôi đã sử dụng nó để tải xuống nguyên mẫu maven. Điều này làm việc tuyệt vời nếu bạn đang đứng sau proxy và làm việc với nhật thực mà không đăng ký để xác định các archtypes maven ngay cả khi bạn đã cấu hình proxy trong cài đặt xml. – Acewin

+0

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.8: get -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: jar – Acewin

22

Đây là những gì làm việc cho tôi để tải phiên bản mới nhất của một artifact gọi là "component.jar" với Maven 3.1.1 cuối cùng (gợi ý còn lại thì không, chủ yếu là do sự thay đổi phiên bản maven tôi tin)

này thực sự tải xuống tệp và sao chép tệp vào thư mục làm việc cục bộ

.210

Từ bash:

mvn dependency:get \ 
    -DrepoUrl=http://.../ \ 
     -Dartifact=com.foo.something:component:LATEST:jar \ 
     -Dtransitive=false \ 
     -Ddest=component.jar \ 
+0

Làm việc cho tôi - cảm ơn. Maven 3.3.3 – akauppi

+0

Tuyệt vời, cảm ơn! Tôi đã không cần sự kiện '-DrepoUrl', tôi đoán nó đã được ngụ ý từ pom của tôi. Ngoài ra tôi đã không sử dụng '-Ddest' như tôi thực sự * đã làm * muốn nó tải về thư mục' .m2' thông thường. – yair

+2

Tham số 'dest' [không được chấp nhận] (http://maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html#destination), và có thể được thay thế bằng một sự xâm nhập của [' copy' ] (http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html) sau 'get' như sau:' mvn dependency: copy -Dartifact = com.foo.something: thành phần: LATEST : jar -DoutputDirectory = .' (trong trường hợp này đặt jar vào thư mục làm việc). –

9

lót để tải về tạo tác maven mới nhất mà không mvn:

curl -O -J -L "https://repository.sonatype.org/service/local/artifact/maven/content?r=central-proxy&g=io.staticcdn.sdk&a=staticcdn-sdk-standalone-optimizer&e=zip&v=LATEST" 
+0

Được giảm giá. Giải pháp này dường như chỉ hoạt động với một sản phẩm kho lưu trữ cụ thể. –

+0

Làm việc tuyệt vời với Nexus 2.x, không hoạt động với 3.x (chưa) – HDave

+0

curl: tùy chọn -J không rõ – xuehui

6

Người ta có thể sử dụng phụ thuộc: bản sao (http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html) mà phải mất một danh sách các hiện vật được xác định trong cấu hình Plugin và sao chép chúng vào một vị trí được chỉ định, đổi tên chúng hoặc tước phiên bản nếu muốn. Mục tiêu này có thể giải quyết các hiện vật từ kho lưu trữ từ xa nếu chúng không tồn tại trong kho lưu trữ cục bộ hoặc lò phản ứng.

Không phải tất cả các thuộc tính của plugin đều có thể được sử dụng trong CLI maven. Các thuộc tính có thuộc tính "Thuộc tính người dùng:" được xác định có thể được chỉ định. Trong ví dụ dưới đây tôi đang tải xuống junit vào thư mục tạm thời của tôi và loại bỏ vesion khỏi tệp jar.

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true 

nơi artifact = junit: junit: 4.11 là tọa độ của maven. Và bạn chỉ định artifcat như groupId: artifactId: Phiên bản [: đóng gói [: phân loại]]

(Nhờ Pascal Thivent cho việc cung cấp https://stackoverflow.com/a/18632876/2509415 mình ở nơi đầu tiên tôi thêm câu trả lời khác.)

+0

Cảm ơn! Bạn cũng có thể sử dụng "mvn dependency: copy ...". –

11

Về làm thế nào để có được nhị phân artifact, Pascal Thivent's answer là nó, mà còn để có được các nguồn vật jar, chúng ta có thể sử dụng:

mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources 

ví dụ

mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources 

này hoạt động vì các tham số artifact thực sự bao gồm groupId:artifactId:version[:packaging][:classifier]. Chỉ cần bao bì phân loại là tùy chọn.

Với jar như bao bìsources như phân loại, các plugin phụ thuộc maven hiểu chúng tôi đang yêu cầu cho jar nguồn khác nhau, không phải là jar artifact.

Thật không may cho bây giờ nguồn tệp jar không thể tải xuống quá mức, điều này có ý nghĩa, nhưng lý tưởng tôi tin rằng nó cũng có thể tôn trọng tùy chọn downloadSources giống như plugin eclipse maven.

Các vấn đề liên quan