2011-06-07 41 views
1

我明白了一个Java源代码树& jar文件的基本结构:正确的位置在Java源代码树中的辅助数据?

com 
    example 
    mypackage 
     myclass1.java 
     myclass2.java 

但是,如果我有位图或HTML文件,是否有,我应该把他们约定?

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

回答

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 

如果你想要一个更“enterprisey”的方式,使用"Project Conventions for Enterprise Applications"发展的相当长一段时间回,由Sun。 AFAIK,只有Netbeans IDE在某些(或全部)范围内实现了这一点。

在运行时,所有资源应该位于META-INF目录中。可能有子目录,但我认为这方面有足够的一致性,与源代码组织不同。

+0

对于META-INF +1。有没有更多的信息在如何做到这一点? – 2011-06-07 14:29:40

+0

(我发现http://stackoverflow.com/questions/70216/whats-the-purpose-of-meta-inf但它暗示已经有关于什么应该和不应该在meta-inf中的约定) – 2011-06-07 14:30:39

+0

There是[SPI映射文件]的约定(http://download.oracle.com/javase/tutorial/sound/SPI-intro.html)。这些文件可以在META-INF/services/中找到。 **编辑:**我误解了以前的评论。进入META-INF的文件通常是要使用“ClassLoader.getResource”或“ClassLoader.getResourceAsStream”访问的资源或配置文件。 Java规范也可能会就可能进入META-INF目录的文件达成一致。 – 2011-06-07 14:40:24

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文件。