我理解java源代码树的基本结构& jar文件:
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
如果您想要更“企业化”的方法,请使用由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文件。