Khi maven nói rằng độ phân giải sẽ không được đánh dấu lại cho đến khi khoảng thời gian cập nhật của MyRepo đã trôi qua, thì khoảng thời gian đó được chỉ định ở đâu?


587

Với maven, thỉnh thoảng tôi gặp một vật phẩm đến từ một số repo của bên thứ 3 mà tôi chưa xây dựng hoặc đưa vào kho lưu trữ của mình.

Tôi sẽ nhận được thông báo lỗi từ ứng dụng khách maven nói rằng không thể tìm thấy cổ vật:

Không tìm thấy org.jfrog.maven.annomojo: maven-plugin-anno: jar: 1.4.0 trong http://myrepo:80/artifactory/repobộ nhớ cache trong kho lưu trữ cục bộ, độ phân giải sẽ không được đánh dấu lại cho đến khi khoảng thời gian cập nhật của MyRepo bị trôi qua hoặc bị cập nhật -> [ Trợ giúp 1]

Bây giờ, tôi hiểu điều này có nghĩa là gì, và có thể chỉ cần chạy lại lệnh của tôi -Uvà mọi thứ thường hoạt động tốt từ đó trở đi .

Tuy nhiên, tôi thấy thông báo lỗi này cực kỳ không trực quan và đang cố gắng tiết kiệm cho đồng nghiệp của tôi một số vấn đề đau đầu.

Tôi đang cố gắng tìm hiểu xem có nơi nào tôi có thể sửa đổi update intervalcài đặt này không .

  1. update intervalcái được đề cập trong thông báo lỗi này là cài đặt phía máy khách hoặc phía máy chủ?
  2. Nếu phía máy khách, làm cách nào để cấu hình nó?
  3. Nếu phía máy chủ, có ai biết làm thế nào / nếu Nexus / Artifactory phơi bày các cài đặt này không?

11
Tôi nhận được thông báo lỗi tương tự sau khi thêm 1 phụ thuộc hơn để pom.xml của tôi. Đối với tôi đây rõ ràng là một BUG. Tôi không hiểu tại sao điều này xảy ra! Nếu tôi thêm phụ thuộc vào dự án của mình và tôi chạy mvn compile thì nó chỉ nên tải xuống các tệp jar. Hành vi này là hoàn toàn vô nghĩa!
Robert Reiz


Gần đây tôi mới trải nghiệm điều này và sau tất cả các câu trả lời tôi đã đọc, một bước bổ sung khác là nhập lại dự án trong Eclipse (trong trường hợp của tôi). Thật là kỳ lạ khi Eclipse tiếp tục làm phiền tôi với một plugin không có trong tôi pom.xml.
Ẩn danh

Một câu hỏi quan trọng đối với tôi !! Cảm ơn cậu!
Ông Noddy

Đối với tôi, hóa ra một repo cụ thể đã được liên kết với GitHub và url đã ngoại tuyến (nhận 404). Tôi cập nhật các repo đến máy chủ nội bộ của chúng tôi và nó làm việc.
cbmeek

Câu trả lời:


286

Tôi đã sử dụng để giải quyết vấn đề này bằng cách xóa thất bại tương ứng để tải xuống thư mục artifact trong repo cục bộ của tôi. Lần tới khi tôi chạy lệnh maven, tải xuống tạo tác được kích hoạt lại. Vì vậy, tôi muốn nói rằng đó là một thiết lập phía khách hàng.

Bên Nexus (phía repo máy chủ), vấn đề này được giải quyết khi định cấu hình tác vụ theo lịch trình. Phía khách hàng, điều này được thực hiện bằng cách sử dụng -U, như bạn đã chỉ ra.


7
"Tôi sử dụng để giải quyết vấn đề này bằng cách xóa thư mục artifact tương ứng trong kho repo cục bộ của tôi." Điều này làm việc cho tôi. Tôi cũng đang sử dụng Netbeans.

16
Nếu Maven lưu ý rằng tạo phẩm được lưu trong bộ nhớ cache không hợp lệ, tại sao nó không thể tự giải quyết vấn đề này?
Stefan

1
"Định cấu hình một tác vụ theo lịch trình" nghĩa là gì và "việc này được thực hiện bằng cách sử dụng -U", bạn có thể vui lòng đặt chúng vào các thuật ngữ UI UI khách quan không?
dùng2568374

1
Tôi giả sử bạn có nghĩa là IDE Eclipse. Lý thuyết là bạn cần tải xuống SNAPSHOT mới nhất. Để làm điều đó, bạn cần thêm tham số '-U' vào lệnh maven của mình, ví dụ: mvn biên dịch sạch -U. Bây giờ, bạn có thể chạy lệnh maven này thông qua dòng lệnh hoặc thông qua Eclipse bằng cách đánh dấu vào ô 'luôn cập nhật ảnh chụp nhanh'. Không chắc chắn, tôi sử dụng intellij những ngày này. Phần 'định cấu hình tác vụ theo lịch trình' đề cập đến một cấu hình cụ thể mà bạn muốn có trên máy chủ Nexus của mình. Cái sau này không có gì để làm với Eclipse như vậy.
Christian Achilli

10
Điều này không trả lời câu hỏi thực tế của OP.
8bitjunkie

116

bạn có thể xóa thư mục tạo tác thất bại tương ứng trong kho lưu trữ cục bộ của bạn. Và bạn cũng có thể chỉ cần sử dụng -Utrong mục tiêu. Nó sẽ làm việc. Điều này hoạt động với maven 3. Vì vậy, không cần hạ cấp xuống maven 2.


2
Tại sao phải lộn xộn với cấu hình kho lưu trữ khi nó có thể đơn giản như vậy?
Koraktor

9
Xin vui lòng đọc câu hỏi cẩn thận trước khi bạn trả lời. OP đang hỏi làm thế nào để thiết lập khoảng thời gian chứ không phải cách bắt buộc cập nhật.
i3ensays

2
Không phải là một câu trả lời cho câu hỏi nhưng đây là những gì mọi người cần khi họ gặp ngoại lệ này. Bởi vì khi bạn đang làm việc trên một phát triển lib cục bộ, tốt nhất là xóa một lib như vậy thay vì cho phép khoảng thời gian làm bạn bối rối.
mcvkr

Chúng ta nên có các kho lưu trữ hợp lệ được thêm vào ~/.m2/settings.xml/<repositories>để giải quyết vấn đề này với các tùy chọn -U
Kanagavelu Sugumar

64

Tôi có một vấn đề liên quan, nhưng câu trả lời của Raghuram đã giúp. (Tôi chưa có đủ danh tiếng để bỏ phiếu trả lời của anh ấy). Tôi đang sử dụng Maven đi kèm với NetBeans và nhận được cùng một lỗi "... đã được lưu trong kho lưu trữ cục bộ, độ phân giải sẽ không được đánh dấu lại cho đến khi khoảng thời gian cập nhật của nexus bị trôi qua hoặc bắt buộc cập nhật -> [Trợ giúp 1]" .

Để khắc phục điều này, tôi đã thêm vào <updatePolicy>always</updatePolicy>tệp cài đặt của mình (C: \ Program Files \ NetBeans 7.0 \ java \ maven \ conf \ settings.xml)

<profile>
  <id>nexus</id>
  <!--Enable snapshots for the built in central repo to direct -->
  <!--all requests to nexus via the mirror -->
  <repositories>
    <repository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
    </repository>
  </repositories>
 <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
    </pluginRepository>
  </pluginRepositories>
</profile>

8
Không giúp gì trong trường hợp của tôi.
Arcy

64

Điều cơ bản xảy ra là, theo cập nhật mặc địnhPolicy của maven.Maven sẽ lấy các lọ từ repo hàng ngày. Vì vậy, trong lần thử đầu tiên, internet của bạn không hoạt động thì nó sẽ không thử lấy lại bình này cho đến 24 giờ.

Nghị quyết:

Hoặc là sử dụng

mvn -U clean install

Trong đó -U sẽ buộc cập nhật repo

hoặc dùng

<profiles>
    <profile>
      ...
      <repositories>
        <repository>
          <id>myRepo</id>
          <name>My Repository</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
         </repository>
      </repositories>
      ...
    </profile>
  </profiles>

trong tệp cài đặt của bạn


39

Theo tham chiếu cài đặt :

updatePolicy: Phần tử này chỉ định tần suất cập nhật sẽ xảy ra. Maven sẽ so sánh dấu thời gian của POM cục bộ (được lưu trữ trong tệp siêu dữ liệu maven của kho lưu trữ) với điều khiển từ xa. Các lựa chọn là: luôn luôn, hàng ngày (mặc định), khoảng: X (trong đó X là số nguyên tính bằng phút) hoặc không bao giờ.

Thí dụ:

<profiles>
    <profile>
      ...
      <repositories>
        <repository>
          <id>myRepo</id>
          <name>My Repository</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
         </repository>
      </repositories>
      ...
    </profile>
  </profiles>
  ...
</settings>

7
Cảm ơn vi đa trả lơi; tuy nhiên, tôi đã thử nghiệm khá nhiều với cài đặt "updatePolicy" và dường như nó không có tác dụng gì đối với độ phân giải "Không tìm thấy" / "Không lưu trong bộ nhớ cache" / "sẽ không được đánh dấu lại".
cprice404

23

Mặc dù bạn có thể giải quyết vấn đề này bằng một bản cài đặt sạch (ghi đè mọi phụ thuộc được lưu trong bộ nhớ cache) như @ Sanjeev-Gulgani gợi ý với mvn -U clean install

Bạn cũng có thể chỉ cần loại bỏ phụ thuộc được lưu trong bộ nhớ cache đang gây ra sự cố với

mvn dependency:purge-local-repository -DmanualInclude="groupId:artifactId"

Xem tài liệu mvn để biết thêm.


9

Lỗi này đôi khi có thể gây hiểu nhầm. 2 điều bạn có thể muốn kiểm tra:

  1. Có một JAR thực tế cho sự phụ thuộc trong repo không? Thông báo lỗi của bạn chứa URL nơi nó đang tìm kiếm, vì vậy hãy đến đó và sau đó duyệt đến thư mục phù hợp với sự phụ thuộc của bạn. Có jar? Nếu không, bạn cần thay đổi sự phụ thuộc của bạn. (ví dụ: bạn có thể chỉ vào một phụ thuộc cha mẹ cấp cao nhất, khi bạn nên chỉ vào một dự án phụ)

  2. Nếu bình tồn tại trên repo từ xa, thì chỉ cần xóa bản sao cục bộ của bạn. Nó sẽ nằm trong thư mục chính của bạn (trừ khi bạn định cấu hình khác) trong .m2 / repository (ls -a để hiển thị ẩn nếu trên Linux).


4
Điều này không liên quan đến câu hỏi của OP. Lý do tại sao lỗi được hiển thị không phải là điểm. OP muốn biết cách đặt khoảng thời gian thử lại.
8bitjunkie

1
Đây có thể là một vấn đề ngụ ý đằng sau bài viết của OP và hóa ra là vấn đề của tôi. Hóa ra tôi có một lỗi đánh máy trong <groupId> mà bằng cách xem lại tùy chọn, tôi sẽ dẫn tôi đi đúng đường.
James Oravec

1
Câu hỏi là làm thế nào để thiết lập khoảng?
smilyface

7

Nếu bạn đang sử dụng Eclipse, hãy truy cập Windows -> Tùy chọn -> Maven và bỏ chọn hộp kiểm "Không tự động cập nhật các phụ thuộc từ kho lưu trữ từ xa".

Điều này cũng hoạt động với Maven 3.


1
đã xác minh cho: nhật thực: Juno Dịch vụ phát hành 2. m2e: v 1.3.1
user77115

8
Điều này không trả lời câu hỏi của OP.
8bitjunkie

5

Bạn cần xóa tất cả các tệp "_maven.repose khu vực" khỏi kho lưu trữ của bạn.


3
không giúp đỡ, hoặc ít nhất là không phải trong trường hợp của tôi
Arcy

1
Nó làm việc cho tôi. Tuy nhiên, tôi đã không xóa tất cả chúng, chỉ có một trong thư mục phụ thuộc cụ thể đó
Piyin

5

Điều này hoạt động sau khi bạn xóa phụ thuộc liên quan khỏi kho lưu trữ maven cục bộ của bạn

/user/.m2/repository/path

Điều này hoạt động như một sự quyến rũ
Jadda

3

Nếu bạn sử dụng Nexus làm repo proxy, nó có cài đặt "Không tìm thấy bộ nhớ cache" với giá trị mặc định 1440 phút (hoặc 24 giờ). Giảm giá trị này có thể giúp (Kho lưu trữ> Cấu hình> Cài đặt hết hạn).

Xem tài liệu để biết thêm.


2

Làm thế nào tôi có vấn đề này,

Khi tôi đổi từ Eclipse Juno thành Luna và kiểm tra các dự án maven của tôi từ repo SVN, tôi đã gặp vấn đề tương tự trong khi xây dựng các ứng dụng.

Những gì tôi đã cố gắng? Tôi đã thử dọn sạch kho lưu trữ cục bộ và sau đó cập nhật lại tất cả các phiên bản bằng tùy chọn -U. Nhưng vấn đề của tôi vẫn tiếp tục.

Sau đó, tôi đã đi đến Cửa sổ -> Tùy chọn -> Maven -> Cài đặt người dùng -> và nhấp vào nút Reindex bên dưới Kho lưu trữ cục bộ và chờ đợi reindex xảy ra.

Đó là tất cả, vấn đề đã được giải quyết.


4
Điều này không trả lời câu hỏi của OP.
8bitjunkie

2

Để cuối cùng trả lời câu hỏi tiêu đề: Đó là (cài đặt phía máy khách) trong (dự án, hồ sơ hoặc cài đặt)

[plugin]?[r|R]epository/[releases|snapshots]/updatePolicy

... nhãn.

Các giá trị có thể (hiện tại, maven: 3.6.0, nhưng tôi cho rằng các giá trị có thể "tương thích ngược") là:

/**
 * Never update locally cached data.
 */
public static final String UPDATE_POLICY_NEVER = "never";
/**
 * Always update locally cached data.
 */
public static final String UPDATE_POLICY_ALWAYS = "always";
/**
 * Update locally cached data once a day.
 */
public static final String UPDATE_POLICY_DAILY = "daily";
/**
 * Update locally cached data **every X minutes** as given by "interval:X".
 */
public static final String UPDATE_POLICY_INTERVAL = "interval";

Đánh giá hiện tại (maven 3.6.0) của thẻ này được triển khai như sau:

public boolean isUpdatedRequired( RepositorySystemSession session, long lastModified, String policy )
{
    boolean checkForUpdates;
    if ( policy == null )
    {
        policy = "";
    }
    if ( RepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy ) )
    {
        checkForUpdates = true;
    }
    else if ( RepositoryPolicy.UPDATE_POLICY_DAILY.equals( policy ) )
    {
        Calendar cal = Calendar.getInstance();
        cal.set( Calendar.HOUR_OF_DAY, 0 );
        cal.set( Calendar.MINUTE, 0 );
        cal.set( Calendar.SECOND, 0 );
        cal.set( Calendar.MILLISECOND, 0 );
        checkForUpdates = cal.getTimeInMillis() > lastModified;
    }
    else if ( policy.startsWith( RepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
    {
        int minutes = getMinutes( policy );
        Calendar cal = Calendar.getInstance();
        cal.add( Calendar.MINUTE, -minutes );
        checkForUpdates = cal.getTimeInMillis() > lastModified;
    }
    else
    {
        // assume "never"
        checkForUpdates = false;
        if ( !RepositoryPolicy.UPDATE_POLICY_NEVER.equals( policy ) )
        {
            LOGGER.warn( "Unknown repository update policy '{}', assuming '{}'",
                    policy, RepositoryPolicy.UPDATE_POLICY_NEVER );
        }
    }
    return checkForUpdates;
}

..với:

private int getMinutes( String policy )
{
    int minutes;
    try
    {
        String s = policy.substring( RepositoryPolicy.UPDATE_POLICY_INTERVAL.length() + 1 );
        minutes = Integer.valueOf( s );
    }
    catch ( RuntimeException e )
    {
        minutes = 24 * 60;
        LOGGER.warn( "Non-parseable repository update policy '{}', assuming '{}:1440'",
                policy, RepositoryPolicy.UPDATE_POLICY_INTERVAL );
    }
    return minutes;
}

... lastModified"Dấu thời gian" (tệp cục bộ) ở đâu / của mỗi tạo tác cơ bản.


Đặc biệt cho interval:xcài đặt:

  • dấu hai chấm :không nghiêm ngặt - bất kỳ nhân vật "không trống rỗng" nào cũng có thể làm điều đó ( =, , ...).
  • giá trị âm x < 0sẽ mang lại "không bao giờ".
  • interval:0 Tôi sẽ giả sử một khoảng thời gian "tối thiểu" (0-59 giây hoặc cao hơn ...).
  • ngoại lệ định dạng số kết quả tính bằng 24 * 60phút (~ "hàng ngày").

..see: DefaultUpdatePolicyAnalyzer , DefaultMetadataResolver # resolveMetadata ()RepositoryPolicy


1

Đối với Intellij người dùng những điều sau đây làm việc cho tôi:

Nhấp chuột phải vào gói của bạn

Maven > Reimport 

Maven > Generate Sources and Update Folders

0

Hơi liên quan .. Tôi đã nhận được

"[ERROR] Không thể thực hiện mục tiêu trên dự án thử nghiệm dự án: Không thể giải quyết các phụ thuộc cho dự án myjarname: jar: 1.0-0: Không tìm thấy myjarname-core: bundle: 1.0-0 trong http://repo1.maven.org/maven2được lưu trữ trong kho lưu trữ cục bộ, độ phân giải sẽ không được lưu được đánh dấu lại cho đến khi khoảng thời gian cập nhật của trung tâm đã hết hoặc các cập nhật bị bắt buộc -> [Trợ giúp 1] "

Lỗi này là do vô tình sử dụng Maven 3thay vì Maven 2. Chỉ cần hình dung nó có thể tiết kiệm thời gian cho ai đó, bởi vì tìm kiếm google ban đầu của tôi đã dẫn tôi đến trang này.


2
Nếu dự án của bạn buộc bạn sử dụng Maven 3 thì sao? Bạn có manh mối gì về những gì đã thay đổi giữa hai phiên bản không?
Xr.

1
Đây chính xác là vấn đề của tôi. Không biết tại sao Maven 3 lại khác so với 2. Cảm ơn bạn đã đăng bài này và giúp tôi không lãng phí thêm thời gian để tìm kiếm giải pháp.
MèoAndCode

Làm thế nào để cài đặt maven2 thay vì maven3?
nghìn tỷ

Câu hỏi rất chung chung .. hệ điều hành gì? Đối với Ubuntu, bạn có thể thực hiện "sudo apt-get install maven2" ... hoặc với bất kỳ Linux / UNIX nào, bạn chỉ cần tải xuống kho lưu trữ và tự biên dịch nó, thêm nó vào đường dẫn của bạn. Hãy thử: shameerarathnayaka.blogspot.com/2012/01/ từ
sdanzig

Điều này làm việc cho tôi và trên thực tế tôi liên kết lại với điều này từ câu trả lời của tôi ở đây .
shiri

0

Maven có các cài đặt updatePolicy để chỉ định tần suất để kiểm tra các cập nhật trong kho lưu trữ hoặc để giữ cho kho lưu trữ đồng bộ với điều khiển từ xa.

  • Giá trị mặc định cho updatePolicy là hàng ngày.
  • Các giá trị khác có thể luôn luôn / không bao giờ / XX (chỉ định khoảng thời gian tính bằng phút).

Mẫu mã bên dưới có thể được thêm vào tệp cài đặt người dùng maven để định cấu hình updatePolicy.

<pluginRepositories>
    <pluginRepository>
        <id>Releases</id>
        <url>http://<host>:<port>/nexus/content/repositories/releases/</url>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>             
</pluginRepositories>

3
Điều này không trả lời câu hỏi của OP. OP rõ ràng rằng họ hiểu vấn đề là gì và làm thế nào để cập nhật kho lưu trữ m2 cục bộ của họ. OP đang hỏi khoảng thời gian nằm ở đâu và làm thế nào để thay đổi nó. Không có đề cập đến bất kỳ IDE nào cả. Bạn chưa đọc câu hỏi.
8bitjunkie

@ 8bitjunkie Câu trả lời này khá trực tiếp cho câu hỏi : If client-side, how do I configure it?. Câu trả lời này không phải là về bất kỳ tính năng IDE nào. Đó là cấu hình kho lưu trữ mvn duy nhất. Đây updatePolicylà khoảng thời gian OP yêu cầu.
montrivo

Đây có thể là câu trả lời được chấp nhận @ cprice404.
montrivo


0

Tôi đã có vấn đề này và các mô tả toàn diện được đề xuất trong này đã giúp tôi khắc phục nó.

Vấn đề thứ hai được tuyên bố là vấn đề của tôi. Tôi đã sử dụng một kho lưu trữ của bên thứ ba mà tôi vừa thêm nó làm repositorymột phần của tệp pom trong dự án của tôi. Tôi thêm thông tin kho lưu trữ tương tự vào pluginrepositoryđể giải quyết vấn đề này.


0

Tôi đã có một lỗi tương tự với một tạo tác khác.

<...> đã được lưu trong bộ nhớ cache cục bộ, độ phân giải sẽ không được đánh dấu lại cho đến khi khoảng thời gian cập nhật của trung tâm đã hết hoặc các bản cập nhật bị bắt buộc

Không có giải pháp nào được mô tả ở trên làm việc cho tôi. Cuối cùng tôi đã giải quyết vấn đề này trong IntelliJ IDEA bằng Tệp> Bộ nhớ cache / Khởi động lại không hợp lệ ...> Không hợp lệ và Khởi động lại .


0

Trong trường hợp của tôi, tôi đã có nhiều dự án

rootProject
 |-> contractProject (using Project Lombok)
 |-> domainProject (dependency on contractProject)

Khi tôi thực hiện "mvn clean install" từ thư mục "domainProject", tôi sẽ gặp lỗi.

Khi tôi thực hiện "mvn clean install" từ thư mục "projectRoot", vấn đề đã biến mất.

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.