辅助数据在java源代码树中的位置正确吗?

辅助数据在java源代码树中的位置正确吗?,java,jar,project-structure,Java,Jar,Project Structure,我了解java源代码树和jar文件的基本结构: com example mypackage myclass1.java myclass2.java 但是如果我有位图或html文件,我应该把它们放在哪里有约定吗? 过去,我在源代码树根目录中添加了一个ui目录(例如,上面com目录中的同级目录)。但这感觉很“鬼鬼祟祟”:从技术上讲,可能会有一个“ui”包。我不知道有什么约定。我个人把我所有的东西都放在一个数据/目录中 即使有这样一个包,存在与类文件冲突的文件的可

我了解java源代码树和jar文件的基本结构:

com
  example
    mypackage
      myclass1.java
      myclass2.java
但是如果我有位图或html文件,我应该把它们放在哪里有约定吗?


过去,我在源代码树根目录中添加了一个
ui
目录(例如,上面
com
目录中的同级目录)。但这感觉很“鬼鬼祟祟”:从技术上讲,可能会有一个“ui”包。

我不知道有什么约定。我个人把我所有的东西都放在一个数据/目录中


即使有这样一个包,存在与类文件冲突的文件的可能性也很小。

我更喜欢Maven方法,即有一个独立于Java源文件的资源目录:

my-app
|-- pom.xml
`-- src
    |-- main
    | `--- resources <-- Resources go here (sibling directory of java)
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java
我的应用程序
|--pom.xml
`--src
|--主要

|`---resources如果您使用maven,它会鼓励/迫使您使用采用良好的项目结构(单个WAR模块):

几点提示:将
data.csv
放在与
Test.java
包相同的目录中,您可以轻松地在
Test.java
中打开此文件(由于数据文件位于多个目录中,因此请保持一切有序):


Maven会自动将
/src/main/resources
内容放在类路径上
/webapp
子目录仅用于WAR文件。

+1用于META-INF。是否有更多关于如何执行此操作的信息?(我发现了,但这意味着已经有关于META-INF中应该和不应该包含哪些内容的约定)有一个约定。这些文件位于
META-INF/services/
中。编辑:我误读了前面的评论。进入META-INF的文件通常是要使用
ClassLoader.getResource
ClassLoader.getResourceAsStream
访问的资源或配置文件。Java规范也可能同意哪些文件可能进入META-INF目录。
.
├── pom.xml
└── src
    └── main
    ├── java
    │   └── com
    │       └── example
    │           └── Test.java
    ├── resources
    │   └── com
    │       └── example
    │           └── data.csv
    └── webapp
        ├── public.png
        └── WEB-INF
            ├── hidden.jsp
            └── web.xml
getClass().getResource("data.csv");  //will only work in com.example package