Thêm tệp thuộc tính vào classpath của IntelliJ


122

Tôi đang chạy một chương trình Java đơn giản từ IntelliJ IDE bằng menu Run-> Run. Nó hoạt động tốt. Bây giờ tôi muốn thêm ghi nhật ký log4j.

Tôi đã thêm một thư mục tài nguyên dưới gốc dự án của mình. Tôi đã thêm tệp log4j.properties trong thư mục đó. Tôi đã thay đổi mã để đăng nhập một cái gì đó.

Cách phù hợp để yêu cầu IntelliJ bao gồm thư mục tài nguyên trong classpath để tệp thuộc tính được nhìn thấy là gì?

Với IntelliJ 8, tôi có thể đoán như một con khỉ say rượu và cuối cùng nó hoạt động. Bây giờ tôi có 9 và tôi hoàn toàn không thành công. Tôi đã cố gắng trong một giờ. Làm thế nào về một tùy chọn "Thêm vào classpath" ở đâu đó? / fume / vent / rant


Ok, tình hình đã được giải quyết. Đây là bản cài đặt mới của IntelliJ - log4J KHÔNG được bao gồm theo mặc định. Trong mã của tôi, tôi đã nhập trình ghi kho, không phải log4j. Trình ghi chép chứng khoán hỗ trợ các phương pháp tương tự nên không rõ ràng là tôi đã sử dụng trình ghi sai! Không có gì ngạc nhiên tại sao nó không đọc tệp thuộc tính log4j hoặc báo cáo rằng tôi cần định cấu hình log4j. Thật là một cú đá vào răng!
Tony Ennis

Tìm thấy một mô tả tốt cho người mới bắt đầu để log4j tuttlem.github.io/2015/02/08/start-logging-with-log4j2.html
Rahal Kanishka

Câu trả lời:


91

Thử cái này:

  • Đi tới Cấu trúc dự án.
  • Chọn mô-đun của bạn.
  • Tìm thư mục trong cây bên phải và chọn nó.
  • Nhấp vào nút Nguồn phía trên cây đó (với thư mục màu xanh lam) để đặt thư mục đó thành thư mục nguồn.

Tôi đã làm điều đó khoảng 50 lần, tôi chỉ làm lại lần nữa. Đầu ra của tôi không thay đổi mặc dù tôi đã thay đổi mô hình chuyển đổi bố cục thành một thứ gì đó rõ ràng. Tôi đang tự hỏi liệu log4j.properties khác có trong classpath của tôi hay không.
Tony Ennis

29
Kiểm tra các mẫu Tài nguyên trong cài đặt Trình biên dịch. Kiểm tra xem "? *. Thuộc tính" có trong đó không. Nó ở đó theo mặc định, nhưng đó là điều duy nhất tôi có thể nghĩ ra ngoài đầu.
ColinD

3
Thay thế cho nút Nguồn - nhấp chuột phải vào bất kỳ Thư mục nào bạn đã tạo và chọn "Đánh dấu Thư mục là": "Nguồn gốc"
mschr

10
Lưu ý rằng nếu bạn đã tạo dự án của mình từ Maven POM, thay vì cấu trúc nguồn đặc biệt, giải pháp này sẽ không hoạt động. Thay vào đó, bạn cần thêm thư mục đó làm tài nguyên cho POM. Hãy xem câu trả lời của Peter Thygesen.
lreeder

Cũng có thể được thực hiện theo chương trình thông qua PropertyConfigurator.configure ("../ conf / log4j.properties")
Jason D

47

Thực ra bạn có ít nhất 2 cách để làm, cách thứ nhất được ColinD mô tả, bạn chỉ cần cấu hình thư mục "resources" là thư mục Sources trong IDEA. Nếu các Mẫu tài nguyên có chứa phần mở rộng của tài nguyên của bạn, thì nó sẽ được sao chép vào thư mục đầu ra khi bạn Thực hiện dự án và thư mục đầu ra tự động là một classpath của ứng dụng của bạn.

Một cách phổ biến khác là thêm trực tiếp thư mục "resources" vào classpath. Đi tới Cấu trúc dự án | Mô-đun | Mô-đun của bạn | Phụ thuộc , nhấp vào Thêm , Thư viện mô-đun một mục nhập , chỉ định đường dẫn đến thư mục "tài nguyên".

Tuy nhiên, một giải pháp khác sẽ là đặt tệp log4j.properties trực tiếp dưới gốc Nguồn của dự án của bạn (trong thư mục gói mặc định). Nó giống như cách đầu tiên ngoại trừ bạn không cần thêm một gốc Nguồn khác trong cài đặt Đường dẫn mô-đun , tệp sẽ được sao chép vào thư mục đầu ra trên Make.

Nếu bạn muốn kiểm tra với các cấu hình log4j khác nhau, có thể dễ dàng hơn khi chỉ định tệp cấu hình tùy chỉnh trực tiếp trong cấu hình Run / Debug , các thông số VM được lưu trữ như:

-Dlog4j.configuration=file:/c:/log4j.properties.


Tôi đã thực hiện đoạn 2 và 3 của bạn không có hiệu lực. Tôi chắc rằng các đề xuất hoạt động chỉ là chúng không có tác dụng - nó hoạt động giống như có một tệp log4j.properties khác trong classpath. Nhưng tôi không thấy nó ở đâu cả. Nếu tôi xóa toàn bộ tệp thuộc tính log4j của mình, tôi không nhận được thông báo "bạn phải định cấu hình cảnh báo log4j" trong bảng điều khiển. Tôi đang sử dụng IntelliJ miễn phí (và phiên bản 9.x) lần đầu tiên, vì vậy có thể nó có liên quan đến điều đó.
Tony Ennis

1
Sử dụng tham số -D VM rõ ràng cũng không có tác dụng. Tại thời điểm này, tôi chỉ có thể phỏng đoán tôi đã rơi từ trên đỉnh của 'cái cây ngu ngốc' và va vào mọi cành cây trên đường đi xuống! Tôi nghĩ rằng tôi sẽ đi vòng quanh JetBrains và hỏi xung quanh ...
Tony Ennis

Bạn có thể vui lòng gửi dự án mẫu với các bước chính xác để tái tạo sự cố tới support@jetbrains.com không?
CrazyCoder

Tôi đang truyền -Dlog4j.configuration = file: / c: /log4j.properties trong các đối số của chương trình. Các thông số VM đã thực hiện thủ thuật cho tôi.
Ajak6

42

Tôi có cùng một vấn đề và nó làm tôi khó chịu vô cùng !!

Tôi đã luôn nghĩ rằng tôi được bổ sung để làm như câu trả lời 2. Điều đó đã từng hoạt động trong Intellij 9 (hiện đang sử dụng 10).

Tuy nhiên, tôi đã phát hiện ra rằng bằng cách thêm dòng này vào tệp maven pom của mình sẽ giúp:

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  ...
</build>

Đó là vấn đề chính xác mà tôi đang gặp phải, bây giờ các tệp tài nguyên đã được sao chép thành công vào thư mục đầu ra.
artjomka

Câu trả lời này thực sự hiệu quả. Tôi đã làm những gì colinD đã đề xuất trong các bình luận của anh ấy. Cảm ơn bạn.

Cảm ơn bạn, đây là giải pháp duy nhất phù hợp với tôi.
Minh Thiện

18

Tôi đã dành khá nhiều thời gian để tìm cách thực hiện điều này trong Intellij 13x. Tôi dường như chưa bao giờ thêm các tệp thuộc tính vào các tạo tác yêu cầu chúng, đây là một bước riêng biệt trong Intellij. Thiết lập bên dưới cũng hoạt động khi bạn có tệp thuộc tính được chia sẻ bởi nhiều mô-đun.

  • Đi tới thiết lập dự án của bạn (CTRL + ALT + SHIFT + S)
  • Trong danh sách, hãy chọn mô-đun mà bạn muốn thêm một hoặc nhiều tệp thuộc tính vào.
  • Ở bên phải, chọn tab Phụ thuộc.
  • Nhấp vào dấu cộng màu xanh lá cây và chọn "Lọ hoặc thư mục".
  • Bây giờ hãy chọn thư mục có chứa (các) tệp thuộc tính. (Tôi chưa thử bao gồm một tệp riêng lẻ)
  • Intellij bây giờ sẽ hỏi bạn "thể loại" của tệp đã chọn là gì. Chọn "lớp" (mặc dù không phải).
  • Bây giờ bạn phải thêm các tệp thuộc tính vào tạo tác. Intellij sẽ cung cấp cho bạn phím tắt hiển thị bên dưới. Nó sẽ hiển thị lỗi ở phần màu đỏ ở dưới cùng và 'bóng đèn màu đỏ' mà khi được nhấp vào sẽ hiển thị cho bạn một tùy chọn để thêm tệp vào cấu phần. Bạn cũng có thể đi tới phần 'hiện vật' và thêm tệp vào hiện vật theo cách thủ công.

nhập mô tả hình ảnh ở đây


14

Đối mặt với một thách thức tương tự khi thêm tệp có phần mở rộng .ini vào đường dẫn classpath. Tìm thấy câu trả lời này , đó là thêm nó vào Tùy chọn -> Trình biên dịch -> Mẫu tài nguyên -> [...]; *. Ini


1
đây là vấn đề chính xác mà tôi gặp phải với các tệp .conf
James

Tôi nghĩ mã của tôi bị sao vậy? Cảm ơn cho giải pháp này
Shoaib Chikate

5

Nếu bạn gặp vấn đề tương tự với Scala và SBT:

  • Đi tới Cấu trúc dự án. Phím tắt là (CTRL + ALT + SHIFT + S)

  • Trên danh sách ngoài cùng bên trái, chọn Cài đặt dự án> Mô-đun

  • Trên danh sách mô-đun bên phải, hãy chọn mô-đun của tên dự án của bạn (không có bản dựng) và chọn tab nguồn

  • Ở giữa, mở rộng thư mục gốc của dự án của bạn cho tôi đó là /home/<username>/IdeaProjects/<projectName>

  • Nhìn vào phần Content Root ở phía bên phải, các đường dẫn màu đỏ là thư mục mà bạn chưa tạo. Bạn sẽ muốn đặt tệp thuộc tính trong thư mục Tài nguyên. Vì vậy, tôi đã tạo src/main/resourcesvà đặt log4j.properties trong đó. Tôi tin rằng bạn cũng có thể sửa đổi Gốc nội dung để đặt nó ở bất cứ đâu bạn muốn (tôi đã không làm điều này).

  • Tôi đã chạy mã của mình với cấu hình SBT và nó tìm thấy tệp log4j.properties của tôi.

nhập mô tả hình ảnh ở đây


2

Đối với những người bạn di chuyển từ Eclipse sang IntelliJ hoặc theo cách khác, đây là một mẹo khi làm việc với các tệp thuộc tính hoặc các tệp tài nguyên khác.

Thật khó chịu (tốn cả buổi tối của tôi để tìm hiểu) nhưng cả hai công việc của IDE khá khác nhau khi tìm kiếm các tệp tài nguyên / thích hợp khi bạn muốn chạy cục bộ từ IDE của mình hoặc trong quá trình gỡ lỗi. (Bao bì thành .jar cũng khá khác nhau, nhưng điều đó được ghi lại tốt hơn.)

Giả sử bạn có một giới thiệu đường dẫn tương đối như thế này trong mã của bạn:

new FileInputStream("xxxx.properties");

(điều này thật tiện lợi nếu bạn làm việc với các tệp .properties cụ thể mà bạn không muốn đóng gói cùng với JAR của mình)

INTELLIJ

(Tôi sử dụng 13.1, nhưng có thể hợp lệ cho nhiều phiên bản hơn)

Tệp xxxx.properties cần phải ở vị trí PHỤ HUYNH của ROOT dự án để được chọn trong thời gian chạy như thế này trong IntelliJ. (ROOT của dự án là nơi chứa thư mục / src)

ECLIPSE

Eclipse chỉ hạnh phúc khi tệp xxxx.properties nằm trong chính dự án ROOT.

Vì vậy, IntelliJ mong đợi tệp .properties sẽ cao hơn 1 cấp so với Eclipse khi nó được tham chiếu như thế này !!

Điều này cũng ảnh hưởng đến cách bạn phải thực thi mã của mình khi bạn có cùng dòng mã này (FileInputStream mới ("xxxx.properties");) trong tệp .jar đã xuất của bạn. Khi bạn muốn nhanh nhẹn và không muốn đóng gói tệp .properties với jar của mình, bạn sẽ phải thực thi jar như bên dưới để tham chiếu chính xác tệp .properties từ dòng lệnh:

INTELLIJ XUẤT KHẨU JAR

java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod

ECLIPSE XUẤT KHẨU JAR

java -jar some.jar

trong đó jar thực thi được xuất Eclipse sẽ chỉ mong đợi tệp .properties được tham chiếu ở cùng vị trí với nơi tệp .jar


Có, logging.properties, không giống như log4j2.xml hoặc log4j.properties, phải được tìm thấy trong gốc mô-đun IntelliJ. Ngoài ra, không giống như Log4j, chỉ hoạt động, tôi đã thấy rằng tôi vẫn phải bồi thẩm đoàn để chạy bên trong IntelliJ (Eclipse sẽ giống như vậy, đây là lỗi của ghi nhật ký Java), xem stackoverflow.com/questions/960099/… . Một giải pháp thay thế sẽ là sửa cấu hình chạy / gỡ lỗi với -Djava.util.logging.config.file =, mà tôi thấy hơi bất tiện vì tôi muốn cấu hình trong mã hoặc trong tệp thuộc tính mong đợi.
Russ Bateman

1

Có lẽ điều này là một chút lạc đề, xem như câu hỏi đã được trả lời, nhưng tôi đã gặp một vấn đề tương tự. Chỉ trong trường hợp của tôi một số tài nguyên kiểm tra đơn vị được sao chép vào thư mục đầu ra khi biên dịch. My persistence.xml trong META-INF thư mục đã sao chép nhưng không có gì khác .

Cuối cùng, tôi đã "giải quyết" vấn đề bằng cách đổi tên các tệp có vấn đề, quở trách dự án và sau đó thay đổi tên tệp trở lại tên ban đầu. Đừng hỏi tôi tại sao điều này làm việc nhưng nó đã làm. Dự đoán tốt nhất của tôi là, bằng cách nào đó, dự án IntelliJ của tôi đã có một chút không đồng bộ với hệ thống tệp và hoạt động đổi tên đã kích hoạt một số loại "quét lại tài nguyên" nội bộ.


1

Đây là một trong những sai lầm ngớ ngẩn mà tôi đã làm. Tôi đã dành rất nhiều thời gian để gỡ lỗi vấn đề này và thử tất cả các phản hồi được đăng ở trên, nhưng cuối cùng, đó là một trong nhiều sai lầm ngớ ngẩn của tôi.

Tôi đã sử dụng org.apache.logging.log4j.Logger(: fml :) trong khi tôi nên sử dụng org.apache.log4j.Logger. Sử dụng trình ghi chính xác này đã cứu buổi tối của tôi.


0

Tôi đã gặp sự cố tương tự với tệp log4j.xml cho bài kiểm tra đơn vị, đã thực hiện tất cả những điều trên. Nhưng tìm ra thì đó là do tôi chỉ chạy lại một bài kiểm tra không thành công .... nếu tôi chạy lại toàn bộ lớp kiểm tra, tệp đúng sẽ được chọn. Đây là theo Intelli-j 9.0.4

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.