在用java编写的软件项目中,您经常拥有资源,这些资源是项目的一部分,应该包含在类路径中。例如,一些模板或图像,应该可以通过类路径(getResource)访问。这些文件应包含在生成的JAR文件中。
很明显,这些资源应该添加到修订控制系统中。但是你把这些文件放在哪个目录中?与java-source-files并行还是在另一个目录中并行再生所需的包结构?
答案 0 :(得分:4)
Maven将它们放入src / main / resources /(Java代码将转到src / main / java /)。主要原因是Maven可以用各种语言编译代码,将它们分开是有意义的,这样一个编译就不会被另一个文件混淆。
对于资源,Maven会在将它们添加到Jar之前替换它们中的变量,因此它们也是“已编译”的源。
答案 1 :(得分:2)
就个人而言,如果它们与代码的特定部分密切相关,并且如果它们没有太多,我宁愿将它们与源代码一起使用。
但是,如果这些文件有自己的组织结构是有意义的,或者如果有数百个文件难以在其中找到源代码,我会将它们分开。
答案 2 :(得分:2)
我更喜欢你的后一种解决方案:一个模仿源代码包结构的独立目录。这样他们就不会破坏你的源代码,而是紧挨着打包的JAR文件中编译的类文件。
答案 3 :(得分:2)
这取决于您的喜好。将它们与源代码文件混合使得重构更容易重命名(因为资源被移动到源代码中),但是只有少数图标,图像和本地化文件,您可以非常轻松地获得文件的混乱。
使用今天的工具,它并不重要。无论您使用Eclipse,Netbeans还是其他工具,它们都允许您使用与源代码不同的二进制包。所以最后你可以按照自己的意愿去做。
我个人试图避免将源与资源混合,因为我通常很少更改资源,但是源代码非常频繁。
答案 4 :(得分:2)
我通常会这样:
project/src
project/resources
project/classes
project/lib
project/dist
src 和资源都具有包结构,构建文件将 classes 和 resources 作为输入放在 dist 中的jar。
在内部运行时,类路径类似于: lib; classes; resources;
如果应用程序安装了安装程序,则会在安装中保留资源目录。
答案 5 :(得分:0)
如果您的构建工具不会混淆,您可以将这些内容放在类路径中。 Eclipse不会尝试编译你的jpegs,也不会编译Ant,因此没有太多担心。好的一点是,如果你有很多相关的东西,你可以把它们放在一起,按功能组织,而不是按文件类型。
我们在工作的地方这样做;我们有电子邮件消息,需要一些代码和一些静态资源。所有这些东西都保存在java源路径的一个文件夹中;我们可以轻松地从系统中添加和删除电子邮件,而不会忘记某些事情,或者像src /资源路径不匹配或在另一棵树中不存在的一棵树中的孤立文件那样出错。
答案 6 :(得分:0)
如前所述,这取决于您,每个项目可能会有所不同。
例如,对于Wicket,将.html
文件保留在类旁边是非常通常和实用的。另外,我经常将一些配置与源代码保持在一起 - META-INF
,WEB-INF
,日志记录。
要让Maven从源代码树中获取资源,请使用:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<!-- Web - Wicket -->
<resource>
<filtering>false</filtering>
<directory>src/main/java</directory>
<includes><include>**</include></includes>
<excludes><exclude>**/*.java</exclude></excludes>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
<!-- Web - Wicket -->
<testResource>
<filtering>false</filtering>
<directory>src/main/java</directory>
<includes><include>**</include></includes>
<excludes><exclude>**/*.java</exclude></excludes>
</testResource>
</testResources>
保持资源分离的主要原因是(imho)工作角色的分离。例如。如果您有一个包含翻译团队的项目,您可以使用与代码分离的字符串以及不同的SCM权限来保留资源。