Tôi có thể cài đặt một vật phẩm bằng cách install:install-file
, nhưng làm cách nào tôi có thể tải xuống một vật phẩm?
Ví dụ:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Tôi có thể cài đặt một vật phẩm bằng cách install:install-file
, nhưng làm cách nào tôi có thể tải xuống một vật phẩm?
Ví dụ:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Câu trả lời:
Bạn có thể sử dụng plugin phụ thuộc maven có dependency:get
mục tiêu hay kể từ phiên bản 2.1. Không cần pom, mọi thứ xảy ra trên dòng lệnh.
Để đảm bảo tìm dependency:get
mục tiêu, bạn cần thông báo rõ ràng cho maven sử dụng phiên bản 2.1, tức là bạn cần sử dụng tên đầy đủ của plugin, bao gồm 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 các phiên bản cũ hơn của Maven (trước 2.1), có thể chạy dependency:get
bình thường (không cần sử dụng tên và phiên bản đủ điều kiện) bằng cách buộc bản sao maven của bạn sử dụng một phiên bản plugin đã cho.
Điều này có thể được thực hiện như sau:
1. Thêm dòng sau trong <settings>
phần tử của ~/.m2/settings.xml
tệp của bạn :
<usePluginRegistry>true</usePluginRegistry>
2. Thêm tệp ~/.m2/plugin-registry.xml
với 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 còn hoạt động nữa với maven 2.1 / 2.2. Trên thực tế, theo Giới thiệu về Đăng ký Plugin , 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 không hoạt động trong Maven 2 . Vì vậy, tôi nghĩ rằng bây giờ chúng ta phải sử dụng tên dài (khi sử dụng plugin không có pom, đó là ý tưởng đằng sau dependency:get
).
:jar:sources
vào vật phẩm , xem stackoverflow.com/a/31109185/537554
mvn dependency:get -Dartifact=group-id:artefact-id:version
Với phiên bản mới nhất (2.8) của Plugin phụ thuộc Maven , việc tải xuống một vật phẩm từ Kho lưu trữ trung tâm Maven đơn giản như:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]
trong đó groupId:artifactId:version
, vv là tọa độ Maven
Một ví dụ, được 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
(Cảm ơn Pascal Thivent đã cung cấp câu trả lời tuyệt vời của anh ấy ngay từ đầu. Tôi đang thêm một câu trả lời khác, vì nó không phù hợp với một nhận xét và nó sẽ quá rộng để chỉnh sửa.)
jar:sources
có nghĩa / không? Tại sao bạn cần chỉ định "jar"? và "nguồn" có nghĩa là nó sẽ tải xuống các phụ thuộc bổ sung mà tạo phẩm yêu cầu không?
sources
, tệp JAR chỉ chứa các nguồn Java, 3. javadoc
, tệp JAR chỉ có tài liệu API. Xem thêm: Trình xử lý tạo tác mặc định của Maven .
[:classifier]
chính xác, nếu tôi có một plugin tập hợp được tạo tệp zip mà tôi muốn tải xuống.
Đây là thứ giúp tôi tải xuống phiên bản mới nhất của một vật phẩm có tên là "component.jar" với Maven 3.1.1 (cuối cùng các đề xuất khác không có, chủ yếu là do thay đổi phiên bản maven tôi tin)
Điều này thực sự tải tập tin và sao chép nó vào thư mục làm việc cục bộ
Từ bash:
mvn dependency:get \
-DrepoUrl=http://.../ \
-Dartifact=com.foo.something:component:LATEST:jar \
-Dtransitive=false \
-Ddest=component.jar \
-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ự đã muốn để nó tải đến thường xuyên .m2
thư mục.
dest
tham số bị phản đối , và có thể được thay thế bằng một invokation của copy
sau get
như vậy: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.
(trong trường hợp này đặt jar trong thư mục làm việc).
Goal requires a project to execute but there is no POM in this directory
.
mvn dependency:copy
(không có dependency:get
đầu tiên).
Về cách lấy nhị phân nhân tạo, câu trả lời của Pascal Thivent là như vậy, nhưng để có được các lọ nguồn tạo tác, 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
Điều này hoạt động bởi vì artifact
tham số thực sự bao gồm groupId:artifactId:version[:packaging][:classifier]
. Chỉ cần đóng gói và phân loại là tùy chọn.
Với jar
như đóng gói và 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ờ các nguồn jar tệp không thể được tải xuống quá mức, điều này có ý nghĩa, nhưng lý tưởng là tôi tin rằng nó cũng có thể tôn trọng tùy chọn downloadSources
giống như plugin nhật thực maven.
Người ta có thể sử dụng phụ thuộc: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) trong đó lấy danh sách các tạo phẩm được xác định trong phần 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 tạo phẩm 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 có thể được sử dụng trong maven CLI. Các thuộc tính có 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 Junit vào thư mục tạm thời của mình và tước vesion từ tệp jar.
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true
trong đó artifact = junit: junit: 4.11 là tọa độ maven. Và bạn chỉ định artifcat là groupId: artifactId: version [: bao bì [: classifier]]
(Cảm ơn Pascal Thivent đã cung cấp https://stackoverflow.com/a/18632876/2509415 của anh ấy ở nơi đầu tiên. Tôi đang thêm một câu trả lời khác)
một lớp để tải về tạo tác maven mới nhất mà không có 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"
Việc sử dụng từ các tài liệu chính thức:
https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get
Đối với trường hợp của tôi, xem câu trả lời dưới đây:
mvn dependency:get -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false
mvn dependency:copy -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false -DoutputDirectory=$6
#mvn dependency:get -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false
#mvn dependency:copy -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false -DoutputDirectory=.
Sử dụng lệnh "mvn phụ thuộc: get" để tải xuống aritfact cụ thể và sử dụng lệnh "mvn phụ thuộc: sao chép" để sao chép tạo phẩm đã tải xuống để hủy dir "-DoutputDirectory"
Đây là một ví dụ để lấy ASM-7 bằng Maven 3.6:
mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar
Hoặc bạn có thể tải xuống jar từ đây: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm và sau đó
mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar
Lệnh:
mvn install:install-file
Thông thường cài đặt các tạo phẩm trong kho lưu trữ cục bộ của bạn, vì vậy bạn không cần phải tải xuống. Tuy nhiên, nếu bạn muốn chia sẻ cổ vật của mình với người khác, bạn sẽ cần triển khai tạo phẩm vào kho lưu trữ trung tâm, xem plugin triển khai để biết thêm chi tiết.
Ngoài ra, việc thêm phụ thuộc vào POM của bạn sẽ tự động tìm nạp bất kỳ tạo phẩm của bên thứ ba nào bạn cần khi bạn xây dựng dự án của mình. Tức là Điều này sẽ tải xuống các tạo phẩm từ kho lưu trữ trung tâm.