2010-09-07 25 views
13

Tôi đang sử dụng Maven, với plugin một lỗ, nhưng khi tôi chạy một tệp thực thi, tôi được chào đón bằng một bức tường cảnh báo, điều này là không thể chấp nhận để sử dụngone-jar xóa thông tin cảnh báo chi tiết về tải ứng dụng

Tôi đã xem mọi tài nguyên có sẵn trên một bình và không thấy hướng dẫn cách giữ bình để phun ra nhiều cảnh báo khi chạy, có ai đã giải quyết vấn đề này không?

JarClassLoader: Warning: META-INF/LICENSE.txt in lib/commons-io-1.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
JarClassLoader: Warning: META-INF/NOTICE.txt in lib/commons-io-1.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
JarClassLoader: Warning: META-INF/LICENSE.txt in lib/commons-lang-2.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
JarClassLoader: Warning: META-INF/NOTICE.txt in lib/commons-lang-2.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
+2

tôi nghi ngờ những lời cảnh báo có liên quan đến onejar. Nó có thể liên quan đến các lọ được đóng gói trong uber-jar. Chăm sóc cập nhật câu hỏi với các cảnh báo mà bạn quan sát? –

+0

Tôi đã thêm cảnh báo mà tôi đang nói đến, tôi đã thực hiện rất nhiều việc và không tìm thấy ai phàn nàn về điều gì đó tương tự, ứng dụng chạy tốt, nhưng dưới dạng ứng dụng giao diện điều khiển tôi chạy với đối số từ bình , có hàng trăm dòng cuộn giao diện điều khiển của tôi trước khi ứng dụng chạy là mất tập trung và không mong muốn – walnutmon

+0

Tôi tin rằng đây là onejar, http://www.koders.com/java/fid47EFFE76AC8A4DF788B368D79D29DFE89BE94A19.aspx?s=ByteCode#L122 hiển thị mã nguồn JarClassLoader, mà là trong một gói mộtjar, nó có các báo cáo in mà tôi thấy ở đây. Loại thư viện java phân phối nào sử dụng system.out những ngày này? – walnutmon

Trả lời

-1

Không có cách nào để làm điều này mà không sửa đổi mã nguồn

+2

Điều này là sai. Sử dụng "-Done-jar.silent = true" đã làm việc cho tôi. – ingyhere

+0

Câu trả lời của Pascal Thivent cũng đã làm việc – rapvelopment

+0

Phiên bản 1.4.5 và tệp one-jar.properties thực hiện mẹo như những người khác đã đề cập. –

8

Dường như các thư này được in khi chạy ở chế độ "tiết". Những gì tôi không nhận được là chế độ tiết có vẻ không được kích hoạt theo mặc định.

Dù sao, bạn có thể cố gắng để thiết lập thuộc tính one-jar.verbose hệ thống để false khi chạy bạn một jar:

java -Done-jar.verbose=false -jar <one-jar.jar> 
+0

Tôi đã xem xét kỹ vấn đề này, bạn hoàn toàn chính xác, tiếc là trạng thái của dự án này là trình cắm thêm maven không cho phép bạn chỉ định phiên bản của mã phụ thuộc, vì vậy nguồn bạn thấy là không không phải là nguồn thực sự được thực thi bởi plugin ... ai đó cần phải tạo lại trình cắm này đúng cách vì có các vấn đề trong các phiên bản nguồn đã được sửa chữa, nhưng không có cách nào để truy cập chúng qua maven. Tôi đã kết thúc nhận được một phiên bản cũ để tránh những outs hệ thống rất khó chịu, nhưng sau đó mùa xuân thứ bị hỏng, do đó, chọn chất độc của tôi – walnutmon

+0

@walnutmon Từ mô tả của bạn, mọi thứ không nhìn tốt: S –

+2

'java -Done-jar. verbose = false -jar 'lừa không hiệu quả đối với tôi. – Withheld

1

Đây là nhiều tốt hơn trong phiên bản mới của plugin One-jar Maven.

Thêm kho plugin:

<pluginRepository> 
     <id>one-jar</id> 
     <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url> 
    </pluginRepository> 

và sử dụng phiên bản 1.4.4 trong định nghĩa plugin.

+0

Tôi sẽ cần một cái bình trong tương lai rất gần, khi tôi sử dụng nó, tôi sẽ thử những gì bạn đã thêm ở trên và nếu nó hoạt động chấp nhận câu trả lời của bạn. Cảm ơn! – walnutmon

+0

Tôi đang sử dụng phiên bản 1.4.4 nhưng thấy thông báo cảnh báo tương tự. Bạn chỉ định phiên bản nào của một jar (ví dụ: ' 0.97')? –

0

tôi nâng cấp fromr 1.4.3 đến 1.4.4 như ai đó đề nghị trước và điều đó khiến các thỏa thuận

9

Tôi thấy rằng nếu bạn tạo một file one-jar.properties và đặt nó trong thư mục gốc của classpath thời gian chạy của bạn (ví dụ, nơi dự án của bạn .class file kết thúc), nó sẽ được đọc bởi lớp khởi động One-jar. Mục nhập trong tệp thuộc tính này chẳng hạn như:

one-jar.silent=true 

sẽ chặn toàn bộ thông điệp nhật ký một-jar.

Các giá trị khác mà lớp khởi động tìm kiếm là one-jar.infoone-jar.verbose.

Mức mặc định là INFO. Như Pascal Thivent đã chỉ ra ở trên, bạn cũng có thể thiết lập thuộc tính System thông qua dòng lệnh với tham số -D của lệnh java, nhưng nếu bạn không muốn phải quy định hoặc nhớ điều này, cách tiếp cận tệp thuộc tính hoạt động tốt.

+1

Tác phẩm này nhưng vị trí của tệp đạo cụ phải nằm trong thư mục gốc của bình cuối cùng. – ingyhere

+0

@ingyhere, cách đặt tệp này vào thư mục gốc của bình cuối cùng? – Alexandr

+0

@ Alexandr Cách dễ nhất là mở nó bằng 7-zip và thả nó vào. – ingyhere

0

Có hai địa điểm để nhận plugin một khối.

  1. https://github.com/jolira/onejar-maven-plugin
  2. http://code.google.com/p/onejar-maven-plugin/

Một 1st tuyên bố là chỉ là một bản sao của một trong 2 đó là phục vụ từ kho chính của Maven. Tôi đã được khuyến khích sử dụng cái này vì nó không yêu cầu specifiying một kho lưu trữ bổ sung plugin mà một trong những thứ hai đòi hỏi. Tuy nhiên, khi tôi chuyển sang sử dụng cái thứ hai (cái chính thức), vấn đề này đã biến mất đối với tôi.

Lưu ý - chuyển -Done-jar.verbose = false đã làm việc cho tôi nhưng không phải khi được đặt trong tệp one-jar.properties như ai đó đã nêu ở trên.

3

Về One-Jar mới nhất và lớn nhất v0.97: Sự cố ở đó.Tệp 'one-jar.properties' thực sự cần phải được đưa vào thư mục gốc của jar cuối cùng. Nó sẽ, tất nhiên, có một dòng mà đọc, one-jar.silent=true. Điều này có thể được thực hiện trong Ant bằng cách đặt một cái gì đó như <fileset dir="${build.dir}" includes="**/*.properties" /> bên trong nhiệm vụ <one-jar ...>.

Cũng có thể dễ dàng đặt vào dòng lệnh bằng lệnh java -Done-jar.silent=true -jar foo-jar-made-by-one-jar.jar.

Tuy nhiên, nó sẽ vẫn báo cáo một dòng mà nó tải thuộc tính từ lớp Khởi động nội bộ One-Jar trước khi chuyển sang chế độ im lặng. Không có cách nào để giải quyết vấn đề này mà không thay đổi mã nguồn bắt đầu từ dòng 317 trong Boot.java, nơi phương thức initializeProperties ghi lại các hoạt động tải/hợp nhất. Xem ID lỗi 3609329 tại SourceForge trong trình theo dõi lỗi One-Jar, nơi tôi đã cung cấp bản sửa lỗi nhanh.

Tóm tắt: Bằng cách thêm tệp one-jar.properties tất cả trừ một dòng ghi nhật ký không liên quan sẽ bị xóa. Điều này sẽ giúp người dùng Maven tìm cách giải quyết.

1

tôi thấy tôi cần phải sử dụng phiên bản 1.4.5 (1.4.4 đã không làm việc) và sau đó là gợi ý để đặt một tập tin one-jar.properties tại thư mục gốc của file jar của tôi với một dòng duy nhất đọc one-jar.silent=true làm việc cho tôi.

0

Tôi đã gửi một bản vá cho điều này khá lâu trước đây mà chỉ làm cho hành vi mặc định im lặng.

public static final int LOGLEVEL_VERBOSE = 5; 

    // Loglevel for all loggers. 
- private static int loglevel = LOGLEVEL_INFO; 
+ private static int loglevel = LOGLEVEL_NONE; 

    private final String prefix; 

AFAIK, nó không bao giờ được áp dụng. Gần đây tôi đã cố định một vấn đề khác, vì vậy tôi đặt các bản sửa lỗi của tôi ra ở đây:

https://github.com/nsoft/uno-jar

Hãy Re-đọc "như là, không có bảo hành" một phần của giấy phép nhiều lần :)

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