2015-11-23 12 views
10

Tôi đang cố gắng liên kết với một số Javadocs được lưu trữ tại javadoc.io (cụ thể là Javadocs của PowerMock) bằng cách sử dụng tùy chọn . Tôi đã cố gắng thêm URL vào Javadocs của PowerMock vào lá cờ -link của mình, nhưng không thể nhận được Javadoc để nhận ra nó. Tôi đang sử dụng các liên kết bên ngoài tới các Javadocs khác tốt (ví dụ: Guava, Java SE 7) với Gradle làm hệ thống xây dựng của tôi. Tôi đã thử các tùy chọn sau:Liên kết với javadoc.io bằng cách sử dụng tùy chọn Javadoc -link

-link http://static.javadoc.io/org.powermock/powermock-core/1.6.3/

^Tôi đã xác nhận rằng có một tập tin package-list trong thư mục này

-link http://static.javadoc.io/org.powermock/powermock-core/

-link http://javadoc.io/doc/org.powermock/powermock-core/1.6.3/

-link http://javadoc.io/doc/org.powermock/powermock-core/

Tất cả những kết quả này trong erro sau r (URL thay đổi cho phù hợp):

javadoc: warning - Error fetching URL: http://static.javadoc.io/org.powermock/powermock-core/1.6.3/

Có ai có lời khuyên về việc làm thế nào để làm cho công việc này?

Theo tôi có thể nói đây là một số vấn đề cụ thể về javadoc.io, mặc dù tôi có thể đang gặp vấn đề về sử dụng - ví dụ: Tôi hiện đang sử dụng -link http://junit.org/javadoc/latest/ mà không có vấn đề, nhưng -link http://static.javadoc.io/junit/junit/4.12/ không hoạt động.

+1

Có thể chạy javadoc với tùy chọn '-verbose' sẽ đưa ra gợi ý, có gì sai. – hinneLinks

+1

Thật không may tôi vẫn không có gì ngoài: '[ERROR] [system.err] javadoc: cảnh báo - Lỗi tìm nạp URL: http: // static.javadoc.io/org.powermock/powermock-core/1.6.3 /' – krog

+1

Truy cập các URL đó (phiên bản 'static.javadoc.io') trong trình duyệt dẫn đến lỗi truy cập bị từ chối. Javadoc có thể có cùng kết quả. – erickson

Trả lời

2

Từ dòng lệnh, sử dụng đối số như -J-Dhttp.agent=javadoc.

Trong Maven, sử dụng một cái gì đó như:

<additionalJOption>-J-Dhttp.agent=maven-javadoc-plugin-${pom‌​.name}</additionalJO‌​ption>

Nền: Như Danilo Pianini gợi ý trong another answer, vấn đề là User-Agent tiêu đề. Tuy nhiên, sự cố không phải là trốngUser-Agent; it's the default Java User-Agent, mà trông giống như "Java/1.8.0_112":

$ URL=https://static.javadoc.io/org.checkerframework/checker-qual/2.2.2/package-list 

# default Java User-Agent: 
$ wget -U Java/1.8.0_112 "$URL" 2>&1 | grep response 
HTTP request sent, awaiting response... 403 Forbidden 

# no User-Agent: 
$ wget -U '' "$URL" 2>&1 | grep response 
HTTP request sent, awaiting response... 200 OK 

# custom User-Agent: 
$ wget -U javadoc "$URL" 2>&1 | grep response 
HTTP request sent, awaiting response... 200 OK 

Vì vậy, việc sửa chữa là để nói Javadoc sử dụng một khác nhau User-Agent. Java sẽ không cho phép bạn bỏ qua User-Agent, vì vậy bạn sẽ phải cung cấp một giá trị, mà Java sẽ thêm vào đại lý mặc định của nó. Tốt nhất là tôi có thể nói, việc chặn Javadoc không có chủ ý: Javadoc chỉ (có lẽ không chính xác) sử dụng Java User-Agent mặc định và mạng phân phối nội dung mà javadoc.io sử dụng các khối theo mặc định.

(Một lưu ý thêm về Maven: Tất cả mọi thứ hoạt động tốt với -link Nó cũng hoạt động tốt với -linkoffline nếu bạn tải file package-list và nói Javadoc để đọc nó từ đĩa Tuy nhiên, nếu bạn sử dụng -linkoffline nhưng nói Javadoc để lấy package-list.. từ URL javadoc.io (đây là điều không bình thường để làm), it may fail Vấn đề: Maven cố gắng xác thực trước tệp package-list nhưng, theo một số phiên bản Java, không thành công vì nó từ chối chứng chỉ SSL javadoc.io, chứng chỉ Javadoc chính nó chấp nhận.)

(Ồ, điều quan trọng là sử dụng URL đặc biệt từ static.javadoc.io, không phải javadoc.io. Ngoài ra, tôi sẽ giới thiệu https, không phải http, trong trường hợp http://static.javadoc.io một ngày nào đó bắt đầu phát hành chuyển hướng đến https://static.javadoc.io, như Javadoc currently doesn't handle such redirects. Ngoài ra, https là một điều tốt :))

+0

Giải thích & giải pháp tuyệt vời, cảm ơn bạn! – krog

2

Tôi kết thúc bằng cách sử dụng -linkoffline để giải quyết vấn đề này, mà tôi cho rằng có thuộc tính đẹp không cần kết nối internet vào lúc xây dựng, mặc dù nếu có ai suy nghĩ thêm về cách thực hiện tác vụ này với -link đôi tai.

2

Thật lạ: tôi có thể thấy trong trình duyệt, ví dụ: http://static.javadoc.io/org.pegdown/pegdown/1.6.0/package-list nhưng khi tôi thêm http://static.javadoc.io/org.pegdown/pegdown/1.6.0 như tùy chọn javadoc của link nó nói

Lỗi lấy URL: http://static.javadoc.io/org.pegdown/pegdown/1.6.0/package-list

tôi sử dụng workaround tiếp theo:

  1. Với maven-dependency-plugin unapack javadoc phụ thuộc mong muốn.
  2. Liên kết với tùy chọn linkoffline.

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-dependency-plugin</artifactId> 
        <version>2.8</version> 
        <executions> 
         <execution> 
          <id>unpack-javadoc</id> 
          <phase>package</phase> 
          <goals> 
           <goal>unpack</goal> 
          </goals> 
          <configuration> 
           <artifactItems> 
            <artifactItem> 
             <groupId>org.pegdown</groupId> 
             <artifactId>pegdown</artifactId> 
             <classifier>javadoc</classifier> 
             <version>${pegdownVersion}</version> 
             <overWrite>false</overWrite> 
             <outputDirectory>${project.build.directory}/pegdown-javadoc</outputDirectory> 
            </artifactItem> 
           </artifactItems> 
          </configuration> 
         </execution> 
        </executions> 
    </plugin> 
    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-javadoc-plugin</artifactId> 
        <configuration> 
         <links> 
          <link>http://www.slf4j.org/apidocs/</link> 
         </links> 
         <offlineLinks> 
          <offlineLink> 
           <url>http://static.javadoc.io/org.pegdown/pegdown/${pegdownVersion}</url> 
           <location>${project.build.directory}/pegdown-javadoc</location> 
          </offlineLink> 
         </offlineLinks> 
        </configuration> 
    </plugin> 
    
3

tôi đã điều tra vấn đề, vấn đề ở đây là một đại lý người dùng phải được thiết lập (một chuỗi rỗng là ok) để cho kết nối để javadoc.io để hoàn thành thành công.

Tôi đã khắc phục sự cố xung quanh và viết a Gradle plugin that may be of help cho những người dựa vào hệ thống xây dựng đó.

Thật không may, công việc xung quanh không thể chuyển sang lời gọi lệnh javadoc -link thông thường.

+1

Thật tuyệt vời! Công việc tuyệt vời tìm ra nguyên nhân gốc rễ và làm việc xung quanh nó, Danilo. – krog

+0

Cảm ơn! Nhân tiện, tôi quên mất * không * trong câu cuối cùng: cách giải quyết có thể * KHÔNG * được chuyển đến lời gọi dòng lệnh thông thường. –

+1

Tôi đã làm điều này để làm việc với các plugin mặc định bằng cách thiết lập thuộc tính hệ thống mà Java sử dụng cho 'User-Agent' trong quá trình' javadoc'. Lưu ý rằng điều này chỉ hoạt động với '-link', không phải' -linkoffline', vì Maven đã xác nhận trước các tệp '-linkoffline'' package-list' và 'javadoc.io' dường như cũng đang từ chối các yêu cầu _Maven's_ - - mặc dù dường như dựa trên một cái gì đó nhiều hơn kiểm tra 'User-Agent' nó dùng để loại bỏ' javadoc'. Dù sao, ma thuật là ' -J-Dhttp.agent = maven-javadoc-plugin - $ {pom.name} '(hoặc bất kỳ chuỗi tác nhân nào bạn muốn sử dụng). –

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