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

时间:2011-06-07 14:18:13

标签: java jar project-structure

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

com
  example
    mypackage
      myclass1.java
      myclass2.java

但如果我有位图或html文件,是否有我应该放置它们的约定?

过去,我在源树根中添加了一个ui目录(例如,上面com目录中的一个兄弟目录)。但这感觉“偷偷摸摸”:技术上可能会有一个“ui”包。

3 个答案:

答案 0 :(得分:3)

我更喜欢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

如果您想要更“企业化”的方法,请使用由Sun开发的"Project Conventions for Enterprise Applications"很长一段时间。 AFAIK,只有Netbeans IDE在某些(或所有)范围内实现了这一点。

在运行时,所有资源都应该在META-INF目录中。可能有子目录,但我认为这个领域有足够的协议,与源代码组织不同。

答案 1 :(得分:0)

我不知道任何惯例。我个人把所有的东西放在数据/目录中。

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

答案 2 :(得分:0)

如果您使用maven,它会鼓励/强制您使用完善的项目结构(单个WAR模块):

.
├── pom.xml
└── src
    └── main
    ├── java
    │   └── com
    │       └── example
    │           └── Test.java
    ├── resources
    │   └── com
    │       └── example
    │           └── data.csv
    └── webapp
        ├── public.png
        └── WEB-INF
            ├── hidden.jsp
            └── web.xml

很少提示:将data.csv放在与Test.java包相同的目录中可以让您轻松地在Test.java内打开此文件(并保持所有内容的顺序,因为数据文件位于多个目录中) :

getClass().getResource("data.csv");  //will only work in com.example package

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