2012-11-28 16 views
5

Tôi có một dự án Ivy chính mà những người khác bao gồm trong dự án của họ thông qua thuộc tính svn:externals. Dự án chứa bình Ivy, tệp ivysettings.xml mặc định kết nối với dự án của chúng tôi và một vài macro Ant cho phép tôi chuẩn hóa cách chúng tôi tạo các lọ, v.v. (Ví dụ: người dùng sử dụng <jar.macro> so với <jar>. <jar.macro> sử dụng cùng các thông số, nhưng cũng tự động nhúng pom.xml vào trong bình và thêm thông tin xây dựng Jenkins vào Tệp kê khai).Ivy: <ivy: settings> so với <ivy: configure>

Chúng tôi cũng sử dụng Jenkins làm hệ thống tích hợp liên tục của chúng tôi. Một trong những điều tôi muốn làm là dọn sạch bộ nhớ cache Ivy cho mỗi lần xây dựng, vì vậy chúng tôi không có bất kỳ vấn đề nào về jar do các vấn đề về bộ nhớ cache. Để làm điều này, tôi đã thiết lập tập tin ivysettings.xml tôi để xác định một bộ nhớ cache riêng biệt cho mỗi Jenkins Executor:

<ivysettings> 
    <property name="env.EXECUTOR_NUMBER" value="0" override="false"/> 
    <caches 
     defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}" 
     resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/> 
    <settings defaultResolver="default"/> 
    <include file="${ivy.dir}/ivysettings-public.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/> 
</ivysettings> 

tôi ban đầu được sử dụng nhiệm vụ <ivy:settings> để cấu hình các dự án của chúng tôi với Ivy. Tuy nhiên, tất cả những người thực thi Jenkins đều sử dụng cùng một bộ nhớ cache Ivy gây ra vấn đề. Tôi đã chuyển từ <ivy:settings> sang <ivy:configure> và sự cố đã biến mất. Rõ ràng, <ivy:configure> thiết lập Ivy ngay lập tức (và do đó thiết lập bộ đệm chính xác) trong khi <ivy:settings> không đặt Ivy cho đến khi <ivy:resolve> được gọi.

Tôi đã nhìn thấy một số email về Nabble về số <ivy:configure> không được chấp nhận (hoặc có thể không). Tôi không thấy gì trong tài liệu trực tuyến Ivy nêu rõ <ivy:configure> không được chấp nhận.

Vì vậy, khi nào bạn sử dụng <ivy:settings> so với <ivy:configure>. Trong trường hợp của tôi, vì tôi cần bộ nhớ cache riêng biệt cho mỗi người thi hành Jenkins, tôi cần sử dụng <ivy:configure>, nhưng có lý do nào tôi có thể sử dụng <ivy:settings> trên <ivy:configure> không? Và, có bị <ivy:configure> phản đối không?

+0

Câu hỏi hay. Tôi chưa bao giờ sử dụng tác vụ "cấu hình". Tôi nghi ngờ các nhiệm vụ cài đặt là hữu ích hơn bởi vì nó sẽ cho phép bạn thực hiện một số nhiệm vụ giải quyết ivy, sử dụng nhiều hơn một tập tin cài đặt ivy. Vì tôi hiếm khi gọi một ivy giải quyết nhiều hơn một lần, nó sẽ xuất hiện không có sự khác biệt chức năng thực sự giữa các nhiệm vụ trong trường hợp của tôi :-) –

+0

Ngoại trừ cả '' và '' có thể mất a _settings ID_, vì vậy cả hai dường như có thể sử dụng nhiều cài đặt và nhiều giải pháp.Nó đề cập rõ ràng điều này trong các tài liệu '', nhưng dường như cả hai nhiệm vụ đều hỗ trợ các tính năng này. Tôi tin rằng '' là một mặc định để sử dụng trong Ivy 2.x, nhưng trong trường hợp của tôi, '' gây ra vấn đề với '' nhưng không phải với ' '. –

+0

Có lẽ câu hỏi này được đăng tốt nhất vào danh sách gửi thư của nhà phát triển. Giống như tôi đã nói tôi hiếm khi thực hiện một giải quyết ivy nhiều hơn một lần trong một xây dựng. Điều đó giải thích tại sao tôi không bao giờ cần chỉ định ID cài đặt. Vâng, đó là một chút câu đố –

Trả lời

4

đây là những gì tôi thấy:

  • <ivy:settings> là mới hơn và ưa thích cách.
  • <ivy:configure> có thể hoặc không được dùng nữa.
  • <ivy:settings> không đặt cài đặt Ivy của tôi cho đến khi <ivy:resolve> được gọi trong khi <ivy:configure> đặt tất cả cài đặt Ivy ngay sau khi tác vụ được thực hiện.

Điều cuối cùng là vấn đề của tôi. Vì tôi đã xây dựng song song với Jenkins, và tôi muốn bắt đầu mỗi lần xây dựng với một bộ nhớ cache hoàn toàn sạch sẽ, tôi sử dụng các thiết lập bộ nhớ cache tùy chỉnh tùy thuộc vào số thực thi Jenkins. Bộ đệm được gắn nhãn cache-0 qua cache-5.

Tuy nhiên, vì <ivy:settings> không được thực thi cho đến khi tôi gọi <ivy:resolve>, cài đặt bộ nhớ cache tùy chỉnh của tôi không được chọn. Tôi gọi <ivy:cleancache> trước khi tôi gọi Ivy giải quyết nguyên nhân gây ra các bản xây dựng để làm sạch bộ nhớ cache chung. Nảy sinh vui nhộn. Sử dụng <ivy:cofnfigure> khắc phục sự cố này.