Làm thế nào để bạn xử lý ảnh chụp nhanh có dấu thời gian của maven-3 một cách hiệu quả?


86

Bây giờ maven-3 đã giảm hỗ trợ cho <uniqueVersion> false </uniqueVersion> cho đồ tạo tác ảnh chụp nhanh, có vẻ như bạn thực sự cần sử dụng SNAPSHOTS có dấu thời gian. Đặc biệt là m2eclipse, sử dụng maven 3 bên trong dường như bị ảnh hưởng với nó, ảnh chụp nhanh cập nhật không hoạt động khi SNAPSHOTS không phải là duy nhất.

Có vẻ như phương pháp hay nhất trước đây là đặt tất cả ảnh chụp nhanh thành uniqueVersion = false

Bây giờ, có vẻ như không có vấn đề gì lớn khi chuyển sang phiên bản có dấu thời gian, sau khi tất cả chúng được quản lý bởi một kho lưu trữ nexus trung tâm, có thể xóa các ảnh chụp nhanh cũ trong các cuộc gọi thông thường.

Vấn đề là các máy trạm của nhà phát triển cục bộ. Kho lưu trữ cục bộ của họ nhanh chóng phát triển rất lớn với các ảnh chụp nhanh độc đáo.

Làm thế nào để đối phó với vấn đề này?

Ngay bây giờ tôi thấy các giải pháp khả thi sau đây:

  • Yêu cầu các nhà phát triển thanh lọc kho lưu trữ theo định kỳ (điều này dẫn đến nhiều sự cố, vì mất nhiều thời gian để xóa và thậm chí lâu hơn để tải xuống mọi thứ cần thiết)
  • Thiết lập một số tập lệnh xóa tất cả các thư mục SNAPSHOT khỏi kho lưu trữ cục bộ và yêu cầu các nhà phát triển chạy tập lệnh đó theo thời gian (tốt hơn so với tập lệnh đầu tiên, nhưng vẫn mất khá nhiều thời gian để chạy và tải xuống các ảnh chụp nhanh hiện tại)
  • sử dụng plugin phụ thuộc: purge-local-repository (Có vấn đề khi chạy từ eclipse, do các tệp đang mở, cần được chạy từ mỗi dự án)
  • thiết lập nexus trên mọi máy trạm và thiết lập công việc để xóa các ảnh chụp nhanh cũ (kết quả tốt nhất, nhưng tôi không muốn duy trì hơn 50 máy chủ nexus, cộng với bộ nhớ luôn chật hẹp trên các máy trạm của nhà phát triển)
  • ngừng sử dụng SNAPSHOTS

Cách tốt nhất để giữ cho kho lưu trữ cục bộ của bạn không làm đầy dung lượng ổ cứng của bạn là gì?

Cập nhật:

Để xác minh vẻ đẹp và để cung cấp thêm thông tin, tôi thiết lập một máy chủ nexus nhỏ, hãy xây dựng hai dự án (a và b) và thử:

a:

<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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>de.glauche</groupId>
  <artifactId>a</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <distributionManagement>
    <snapshotRepository>
        <id>nexus</id>
        <name>nexus</name>
        <url>http://server:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
  </distributionManagement>

</project>

b:

<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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>de.glauche</groupId>
  <artifactId>b</artifactId>
  <version>0.0.1-SNAPSHOT</version>
    <distributionManagement>
    <snapshotRepository>
        <id>nexus</id>
        <name>nexus</name>
        <url>http://server:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
  </distributionManagement>
 <repositories>
    <repository>
        <id>nexus</id>
        <name>nexus</name>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <url>http://server:8081/nexus/content/repositories/snapshots/</url>
    </repository>
 </repositories>
  <dependencies>
    <dependency>
        <groupId>de.glauche</groupId>
        <artifactId>a</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

Bây giờ, khi tôi sử dụng maven và chạy "deploy" trên "a", tôi sẽ có

a-0.0.1-SNAPSHOT.jar
a-0.0.1-20101204.150527-6.jar
a-0.0.1-SNAPSHOT.pom
a-0.0.1-20101204.150527-6.pom

trong kho lưu trữ cục bộ. Với phiên bản dấu thời gian mới mỗi khi tôi chạy mục tiêu triển khai. Điều tương tự cũng xảy ra khi tôi cố gắng cập nhật Ảnh chụp nhanh từ máy chủ nexus (đóng "a" Dự án, xóa nó khỏi kho lưu trữ cục bộ, xây dựng "b")

Trong một môi trường có nhiều ảnh chụp nhanh được xây dựng (máy chủ hudson ...), reposioty cục bộ lấp đầy với các phiên bản cũ nhanh chóng

Cập nhật 2:

Để kiểm tra cách thức và lý do tại sao điều này không thành công, tôi đã thực hiện thêm một số bài kiểm tra. Mỗi bài kiểm tra được chạy với mọi thứ sạch sẽ (de / glauche bị xóa khỏi cả máy và nexus)

  • mvn triển khai với maven 2.2.1:

kho lưu trữ cục bộ trên máy A có chứa snapshot.jar + snapshot-timestamp.jar

NHƯNG: chỉ có một lọ có dấu thời gian trong nexus, siêu dữ liệu cho biết:

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>de.glauche</groupId>
  <artifactId>a</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <versioning>
    <snapshot>
      <timestamp>20101206.200039</timestamp>

      <buildNumber>1</buildNumber>
    </snapshot>
    <lastUpdated>20101206200039</lastUpdated>
  </versioning>
</metadata>
  • chạy bản cập nhật phụ thuộc (trên máy B) trong m2eclipse (nhúng m3 cuối cùng) -> kho lưu trữ cục bộ có snapshot.jar + snapshot-timestamp.jar :(
  • chạy gói mục tiêu với maven bên ngoài 2.2.1 -> kho lưu trữ cục bộ có snapshot.jar + snapshot-timestamp.jar :(

Ok, tiếp theo hãy thử với maven 3.0.1 (sau khi xóa tất cả các dấu vết của dự án a)

  • kho lưu trữ cục bộ trên máy A trông đẹp hơn, chỉ có một jar không có dấu thời gian

  • chỉ có một lọ có dấu thời gian trong nexus, siêu dữ liệu cho biết:

    de.glauche a 0.0.1-SNAPSHOT

    <snapshot>
      <timestamp>20101206.201808</timestamp>
      <buildNumber>3</buildNumber>
    </snapshot>
    <lastUpdated>20101206201808</lastUpdated>
    <snapshotVersions>
      <snapshotVersion>
        <extension>jar</extension>
        <value>0.0.1-20101206.201808-3</value>
        <updated>20101206201808</updated>
      </snapshotVersion>
      <snapshotVersion>
        <extension>pom</extension>
        <value>0.0.1-20101206.201808-3</value>
        <updated>20101206201808</updated>
      </snapshotVersion>
    </snapshotVersions>
    

  • chạy bản cập nhật phụ thuộc (trên máy B) trong m2eclipse (nhúng m3 cuối cùng) -> kho lưu trữ cục bộ có snapshot.jar + snapshot-timestamp.jar :(

  • chạy gói mục tiêu với maven bên ngoài 2.2.1 -> kho lưu trữ cục bộ có snapshot.jar + snapshot-timestamp.jar :(

Vì vậy, tóm lại: Mục tiêu "triển khai" trong maven3 hoạt động tốt hơn trong 2.2.1, kho lưu trữ cục bộ trên máy tạo có vẻ ổn. Tuy nhiên, đầu thu luôn kết thúc với rất nhiều phiên bản theo thời gian ...

Tôi đang làm gì sai?

Cập nhật 3

Tôi cũng đã thử nghiệm nhiều cấu hình khác nhau, đầu tiên thay thế nexus bằng nhân tạo -> hành vi tương tự. Sau đó, sử dụng máy khách linux maven 3 để tải xuống ảnh chụp nhanh từ trình quản lý kho lưu trữ -> kho lưu trữ cục bộ vẫn có ảnh chụp nhanh có dấu thời gian :(


Câu hỏi liên quan, chỉ về phần .m2 \ repository cục bộ, tập trung vào kho cục bộ trên máy chủ xây dựng (Jenkins): stackoverflow.com/q/9729076/223837 .
MarnixKlooster ReinstateMonica

Đây là liên kết hoạt động tới Ghi chú khả năng tính toán của Apcahe Maven - cwiki.apache.org/confluence/display/MAVEN/…
aka_sh

Câu trả lời:


36

Các <uniqueVersion>cấu hình áp dụng cho các đồ tạo tác được triển khai (thông qua triển khai mvn) vào một Maven kho như Nexus.

Để xóa những thứ này khỏi Nexus, bạn có thể dễ dàng tạo một công việc tự động để xóa kho SNAPSHOT mỗi ngày. Nó có thể được cấu hình để giữ lại một số lượng ảnh chụp nhất định hoặc giữ chúng trong một khoảng thời gian nhất định. Nó siêu dễ dàng và hoạt động tuyệt vời.

Phần mềm trong kho lưu trữ cục bộ trên máy của nhà phát triển đến đó từ mục tiêu "cài đặt" và không sử dụng các dấu thời gian này ... chúng chỉ tiếp tục thay thế phiên bản SNAPSHOT duy nhất trừ khi bạn cũng đang tăng số bản sửa đổi (ví dụ: 1.0.0- SNAPSHOT đến 1.0.1-SNAPSHOT).


1
Vấn đề là, mục tiêu "cài đặt" không được sử dụng nhiều trong môi trường phân tán với nhiều nhà phát triển. Chúng tôi cũng sử dụng một máy chủ hudson, người thực hiện xây dựng (và triển khai) các ảnh chụp nhanh mới trên mỗi cam kết cv, điều này xảy ra khá thường xuyên mỗi ngày. Tôi đã biết về mechainsm xóa ảnh chụp nhanh nexus, hãy xem danh sách các giải pháp thay thế có thể có.
mglauche

Mỗi máy phát triển phải có một kho lưu trữ "cục bộ" ~/.m2/repositoryvà mỗi máy pom.xmlphải có một định nghĩa kho lưu trữ trỏ đến một phiên bản Nexus duy nhất trên mạng LAN của bạn. (giống như bạn thể hiện). Chúng tôi đã thiết lập điều này, cùng với Hudson xây dựng dựa trên mọi cam kết Subversion và nó hoạt động rất tốt. Các bản dựng SNAPSHOT được "triển khai" tới Nexus, nơi chúng thu thập và được thanh lọc hàng tuần. Máy của nhà phát triển tự động tải xuống SNAPSHOT mới nhất từ ​​Nexus ~/.m2/repositoryvà nó sẽ thay thế SNAPSHOT đã tải xuống trước đó. Các nhà phát triển không bao giờ nên có phiên bản Nexus của riêng họ.
HDave

2
Tôi vừa đọc bản cập nhật của bạn và có một điều cần bổ sung: Các tạo tác có dấu thời gian sẽ không bao giờ được nhìn thấy bên trong kho lưu trữ cục bộ (~ / .m2 / repository) của bạn. Nếu đúng như vậy thì có gì đó không ổn. Chúng chỉ được nhìn thấy bên trong Nexus. Bên trong Nexus, có, họ thu thập nhanh chóng. Có thể hàng trăm MB mỗi ngày. Một công việc nexus có thể dễ dàng hơn trong việc thanh lọc những thứ này hàng ngày để giữ cho số lượng ít.
HDave

6
Chúng chắc chắn kết thúc trong kho lưu trữ cục bộ (~ / .m2 / kho lưu trữ một), chúng kết thúc ở đó sau khi chạy mục tiêu "triển khai" trên mvn -U cài đặt trên dự án phụ thuộc (tức là dự án B). Tôi thậm chí đã kiểm tra nó với maven 2.2.1 và maven 3, cả hai đều có cùng hành vi.
mglauche

2
Tôi nghĩ rằng tôi đã hiểu ngay bây giờ ... chúng KHÔNG xuất hiện ở đó khi nhà phát triển thực hiện "triển khai", mà là khi nhà phát triển xây dựng một dự án phụ thuộc. Tại thời điểm đó, SNAPSHOT mới nhất của dự án ngược dòng được tải xuống từ Nexus vào kho lưu trữ ~ / .m2 / với dấu thời gian được giữ nguyên như một phần của tên tệp. Thê nay đung không?
HDave

13

Plugin này xóa các tạo tác của dự án khỏi kho lưu trữ cục bộ. Hữu ích khi chỉ giữ một bản sao của ảnh chụp nhanh cục bộ lớn.

<plugin>         
    <groupId>org.codehaus.mojo</groupId>         
    <artifactId>build-helper-maven-plugin</artifactId>         
    <version>1.7</version>         
    <executions>           
        <execution>             
            <id>remove-old-artifacts</id>             
            <phase>package</phase>             
            <goals>               
                <goal>remove-project-artifact</goal>             
            </goals>            
            <configuration>  
                <removeAll>true</removeAll><!-- When true, remove all built artifacts including all versions. When false, remove all built artifacts of this project version -->             
            </configuration>          
        </execution>         
    </executions>       
</plugin>

7

Tôi không thích bất kỳ giải pháp được đề xuất nào. Xóa bộ nhớ cache maven thường làm tăng đáng kể lưu lượng mạng và làm chậm quá trình xây dựng. build-helper-maven-plugin chỉ giúp được với một tạo tác, tôi muốn có giải pháp có thể xóa tất cả các tạo tác ảnh chụp nhanh có dấu thời gian đã lỗi thời khỏi bộ nhớ cache cục bộ trong một lệnh đơn giản. Sau vài ngày tìm kiếm, tôi đã từ bỏ và quyết định viết một chương trình nhỏ. Chương trình cuối cùng có vẻ đang hoạt động khá tốt trong môi trường của chúng tôi. Vì vậy, tôi quyết định chia sẻ nó với những người khác có thể cần công cụ như vậy. Nguồn có thể được lấy từ github: https://github.com/nadestin/tools/tree/master/MavenCacheCleanup


@HDave Tôi đã không quản lý để định dạng đúng phân đoạn pom ở đây, hãy kiểm tra nó tại https://github.com/nadestin/tools/wiki/m2cachecleanup-maven-plugin . Trên Jenkins nô lệ của chúng tôi, tiện ích này đòi lại ~ 200Mb dung lượng đĩa hàng ngày.
yurinadestin,

2

Đối với phần kho lưu trữ từ xa của điều này, tôi nghĩ rằng các câu trả lời trước đó thảo luận về việc loại bỏ SNAPSHOT trong một khoảng thời gian đều đặn sẽ hoạt động. Nhưng không ai giải quyết phần đồng bộ hóa máy trạm của nhà phát triển cục bộ trong câu hỏi của bạn.

Chúng tôi vẫn chưa bắt đầu sử dụng Maven3, vì vậy chúng tôi vẫn chưa thấy SNAPSHOT bắt đầu được tích hợp trên các máy cục bộ.

Nhưng chúng tôi đã gặp các vấn đề khác nhau với m2eclipse. Khi chúng tôi đã bật "Độ phân giải không gian làm việc" và dự án tồn tại trong không gian làm việc của chúng tôi, các bản cập nhật nguồn thường khiến chúng tôi luôn lo lắng. Nhưng chúng tôi nhận thấy rất khó để m2eclipse tự cập nhật với các tạo tác được xuất bản gần đây trong Nexus. Chúng tôi đang gặp phải các vấn đề tương tự trong nhóm của mình và nó đặc biệt có vấn đề vì chúng tôi có một biểu đồ dự án rất lớn ... có rất nhiều phụ thuộc sẽ không có trong không gian làm việc của bạn nhưng sẽ được xuất bản thường xuyên SNAPSHOT.

Tôi khá chắc chắn rằng điều này quay trở lại một vấn đề trong m2eclipse, nơi nó không xử lý SNAPSHOT chính xác như nó cần. Bạn có thể thấy trong bảng điều khiển Maven trong eclipse, nơi m2eclipse cho bạn biết rằng nó đang bỏ qua bản cập nhật SNAPSHOT được xuất bản gần đây vì nó có một phiên bản được lưu trong bộ nhớ cache. Nếu bạn thực hiện -U từ cấu hình đang chạy hoặc từ dòng lệnh, Maven sẽ nhận thay đổi siêu dữ liệu. Nhưng lựa chọn "Cập nhật Ảnh chụp nhanh ..." sẽ cho m2eclipse biết để Maven hết hạn bộ nhớ cache này. Nó dường như không được thông qua. Dường như có một lỗi được gửi cho vấn đề này nếu bạn quan tâm đến việc bỏ phiếu cho nó: https://issues.sonatype.org/browse/MNGECLIPSE-2608

Bạn đã đề cập đến điều này trong một bình luận ở đâu đó.

Cách giải quyết tốt nhất cho vấn đề này dường như là các nhà phát triển phải thanh lọc các máy trạm cục bộ của họ khi mọi thứ bắt đầu hỏng từ bên trong m2eclipse. Giải pháp tương tự cho một vấn đề khác ... Những người khác đã báo cáo sự cố với Maven 2.2.1 và 3 sao lưu m2eclipse, và tôi cũng thấy như vậy.

Tôi hy vọng nếu bạn đang sử dụng Maven3, bạn có thể định cấu hình nó để chỉ kéo SNAPSHOT mới nhất và lưu vào bộ nhớ cache trong khoảng thời gian mà kho lưu trữ cho biết (hoặc cho đến khi bạn hết hạn bằng tay). Hy vọng rằng sau đó bạn sẽ không cần phải có một loạt SNAPSHOT trong kho lưu trữ cục bộ của mình.

Đó là trừ khi bạn đang nói về một máy chủ xây dựng đang thực hiện một cách thủ công mvn installvề họ. Về cách ngăn SNAPSHOTs xây dựng trên một môi trường như máy chủ bản dựng, chúng tôi đã tránh được dấu đầu dòng đó bằng cách để mỗi bản dựng sử dụng không gian làm việc và kho lưu trữ cục bộ của riêng nó (mặc dù, trong Maven 2.2.1, một số thứ như Các POM dường như luôn xuất hiện từ ~ / .m2 / repository) SNAPSHOTs bổ sung thực sự chỉ tồn tại trong một bản dựng duy nhất và sau đó chúng bị loại bỏ (và tải xuống lại từ đầu). Vì vậy, chúng tôi đã thấy rằng cách tiếp cận này cuối cùng sẽ chiếm nhiều dung lượng hơn để bắt đầu, nhưng nó có xu hướng duy trì ổn định hơn so với việc giải quyết mọi thứ từ một kho lưu trữ duy nhất. Tùy chọn này (trên Hudson) được gọi là "Sử dụng kho Maven riêng" và nằm dưới nút Nâng cao của phần Xây dựng về cấu hình dự án khi bạn đã chọn xây dựng bằng Maven. Đây là mô tả trợ giúp cho tùy chọn đó:

Thông thường, Hudson sử dụng kho lưu trữ Maven cục bộ do Maven xác định - quy trình chính xác dường như không có tài liệu, nhưng đó là ~ / .m2 / repository và có thể bị ghi đè trong ~ / .m2 / settings.xml (xem phần tham khảo để biết thêm chi tiết .) Điều này thường có nghĩa là tất cả các công việc được thực hiện trên cùng một nút chia sẻ một kho lưu trữ Maven duy nhất. Ưu điểm của điều này là bạn có thể tiết kiệm dung lượng đĩa, nhưng nhược điểm của điều này là đôi khi các bản dựng đó có thể gây nhiễu lẫn nhau. Ví dụ: bạn có thể kết thúc việc xây dựng thành công không chính xác, chỉ vì bạn có tất cả các phụ thuộc trong kho lưu trữ cục bộ của mình, mặc dù thực tế là không có kho lưu trữ nào trong POM có thể có chúng.

Cũng có một số vấn đề được báo cáo liên quan đến việc các quy trình Maven đồng thời cố gắng sử dụng cùng một kho lưu trữ cục bộ.

Khi tùy chọn này được chọn, Hudson sẽ yêu cầu Maven sử dụng $ WORKSPACE / .repository làm kho lưu trữ Maven cục bộ. Điều này có nghĩa là mỗi công việc sẽ nhận được kho lưu trữ Maven riêng biệt chỉ dành cho chính nó. Nó khắc phục các sự cố trên, với chi phí tiêu thụ thêm dung lượng đĩa.

Khi sử dụng tùy chọn này, hãy cân nhắc thiết lập trình quản lý tạo tác Maven để bạn không phải truy cập kho chứa Maven từ xa quá thường xuyên.

Nếu bạn muốn kích hoạt chế độ này trong tất cả các công việc Maven được thực hiện trên Hudson, hãy tham khảo kỹ thuật được mô tả tại đây.

Hy vọng điều này sẽ giúp ích - nếu nó không giải quyết được vấn đề của bạn, vui lòng cho tôi biết nơi tôi đã bỏ lỡ.


Các lỗi nêu trên đã được cố định: bugs.eclipse.org/bugs/show_bug.cgi?id=339527
HDave

1

Trong thực tế , việc xóa các tệp được đánh dấu thời gian như artifact-0.0.1-20101204.150527-6.jarcó thể rất đơn giản:

root = 'path to your repository'

new File(root).eachFileRecurse {
  if (it.name.matches(/.*\-\d{8}\.\d{6}\-\d+\.[\w\.]+$/)) {
    println 'Deleting ' + it.name
    it.delete()
  }
}

Cài đặt Groovy , lưu tập lệnh vào một tệp và lên lịch thực hiện mỗi tuần, bắt đầu, đăng nhập, bất cứ điều gì phù hợp với bạn.

Hoặc, bạn thậm chí có thể chuyển việc thực thi vào bản dựng maven, sử dụng gmavenplus-plugin . Lưu ý, vị trí kho lưu được maven đặt vào thuộc tính settings.localRepositoryvà sau đó được liên kết thông qua cấu hình thành biến như thế nào repository:

  <plugin>
    <groupId>org.codehaus.gmavenplus</groupId>
    <artifactId>gmavenplus-plugin</artifactId>
    <version>1.3</version>
    <executions>
      <execution>
        <phase>install</phase>
        <goals>
          <goal>execute</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <properties>
        <property>
          <name>repository</name>
          <value>${settings.localRepository}</value>
        </property>
      </properties>
      <scripts>
        <script><![CDATA[
          new File(repository).eachFileRecurse {
            if (it.name.matches(/.*\-\d{8}\.\d{6}\-\d+\.[\w\.]+$/)) {
              println 'Deleting snapshot ' + it.getAbsolutePath()
              it.delete()
            }
          }
        ]]></script>
      </scripts>
    </configuration>
    <dependencies>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-all</artifactId>
        <version>2.3.7</version>
        <scope>runtime</scope>
      </dependency>
    </dependencies>
  </plugin>  

0

Thêm thông số sau vào tệp POM của bạn

POM

<configuration>
<outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename>
</configuration>

https://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html

Ví dụ về POM

<plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.10</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>3.8.1</version>
                  <type>jar</type>
                  <overWrite>false</overWrite>
                  <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
                  <destFileName>optional-new-name.jar</destFileName>
                </artifactItem>
              </artifactItems>
              **<outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename>**
              <outputDirectory>${project.build.directory}/wars</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>true</overWriteSnapshots>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

Định cấu hình trong Jenkins:

// copy artifact 
copyMavenArtifact(artifact: "commons-collections:commons-collections:3.2.2:jar", outputAbsoluteArtifactFilename: "${pwd()}/target/my-folder/commons-collections.jar")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.