2016-02-17 115 views
1

承擔IntelliJ開發,包裝在一個JAR,並使用「資源」文件加載從JAR,外面的classpath資源文件中的IntelliJ

  • 可以位於任何封裝應用(不僅在resources文件夾)
  • 可能具有非標準文件擴展名(甚至可能是Java文件)
  • 並不存在於所有的類路徑(例如,以避免循環依賴)

如果在一個包中的類(比如,MyClass)(比方說,com.example.pack)被賦予一個路徑到駐留其類路徑外部,並且嘗試經由

MyClass.class.getClassloader().getResourceAsStream(resourcePath); 

InputStream對象返回給訪問這樣的「資源」 IntelliJ由於類路徑,單元測試(預計)爲null。但是,當代碼執行時,它將起作用,因爲所有內容都在同一個JAR中。

例如,捆紮在同一JAR(比如說,MyApplication.jar)和運行的東西的應用程序的所有的包等

java -cp MyApplication.jar com.example.pack.MyClass 

從命令行,確實產生非nullInputStream

有什麼辦法來配置IntelliJ以某種方式「知道」的所有包屬於同一JAR,從而相應地對待他們,因此,上述調用getResourceAsStream()作品?

回答

1

配置的唯一方法是將包含資源文件的模塊添加爲包含測試的模塊的依賴項。然後IntelliJ IDEA會將該模塊包含到測試的運行時類路徑中,並且getResourceAsStream()調用將起作用。

+0

這不包括已經依賴於其他模塊的模塊,導致循環依賴。否則,答案是正確的。感謝和+1。 – PNS

+0

IntelliJ項目結構確實支持循環依賴,所以這本身不是問題。 – yole