我明白了一个Java源代码树& jar文件的基本结构:正确的位置在Java源代码树中的辅助数据?
com
example
mypackage
myclass1.java
myclass2.java
但是,如果我有位图或HTML文件,是否有,我应该把他们约定?
在过去,我在源树根中添加了一个ui
目录(例如上面的com
目录中的同级目录)。但这感觉“偷偷摸摸”:从技术上讲,可能会有一个“UI”包。
我明白了一个Java源代码树& jar文件的基本结构:正确的位置在Java源代码树中的辅助数据?
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
如果你想要一个更“enterprisey”的方式,使用"Project Conventions for Enterprise Applications"发展的相当长一段时间回,由Sun。 AFAIK,只有Netbeans IDE在某些(或全部)范围内实现了这一点。
在运行时,所有资源应该位于META-INF
目录中。可能有子目录,但我认为这方面有足够的一致性,与源代码组织不同。
如果你使用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文件。
对于META-INF +1。有没有更多的信息在如何做到这一点? – 2011-06-07 14:29:40
(我发现http://stackoverflow.com/questions/70216/whats-the-purpose-of-meta-inf但它暗示已经有关于什么应该和不应该在meta-inf中的约定) – 2011-06-07 14:30:39
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