你如何组织可在类路径非源资源在你的Java项目?
题
在一个软件项目用Java编写的,你经常有资源,这是该项目的一部分,应包含在类路径中。比如一些模板或图像,这应该是通过类路径(的getResource)访问。这些文件应该被包括到生成JAR文件。
很明显,这些资源应该被添加到修订控制的系统。但是在哪个目录你把这些文件?平行于Java的源的文件或在另一个目录中也再现所需的包结构?
解决方案
我喜欢你的后一种溶液:即模拟了源代码的封装结构的单独的目录。这样,他们就不会破坏你的源代码,但会是正确的打包JAR文件旁边编译的类文件。
其他提示
Maven的将它们放入的src /主/资源/(Java代码会去的src / main /的Java /)。主要的原因是,Maven可以在各种语言编译代码,它是有道理的,让他们分开,以便一个编译不受文件另一个混淆。
在资源的情况下,Maven会替换他们变量它们被添加到一个Jar之前,因此它们被“编译”源以及
就个人而言,我会与源代码喜欢有它们放在一起,如果他们是密切相关的代码的特定部分,如果有不太多了。
但是,如果它是有道理的,这些文件有自己的组织结构,或者有数百个文件,这将使它很难找到他们之间的源代码,我让他们分开。
这取决于你的喜好。让他们与源代码文件的混合使得重构像包更容易的重命名(如ressources与源toghether移动),但超过了一把的图标,图像和本地化的文件,你的文件的混乱很容易。
随着今天的工具也并不重要。无论你使用Eclipse,Netbeans的或其他工具,他们都让你有二进制包有不同的布局比源代码。所以,最后,你可以像你想做到这一点。
我个人尽量避免与资源混合来源,因为我通常会改变的资源很少,但源代码的非常频繁。
我通常是这样的:
project/src
project/resources
project/classes
project/lib
project/dist
两个 SRC 和资源具有用于封装结构和构建文件取类和作为输入的资源其被放置在罐子DIST 。
当在内部运行的类路径是这样的: LIB;班;资源;
如果该应用具有安装在安装程序创建和放置资源目录中的安装目录完整。
您可以把这些东西在classpath中,如果您的构建工具并不感到困惑。 Eclipse将不会尝试编译您的JPEG文件,所以并不会有蚂蚁,所以没有太多的担心。这种做法的好处是,如果你有很多相关的东西,你可以让他们在一起,按功能组织为按文件类型反对。
我们做到这一点,我的工作;我们需要一些代码和静态资源的极少数电子邮件。所有这些东西都在java源路径在一个文件夹放在一起;我们可以轻松地添加和删除系统中的电子邮件,没有忘事或另一棵树使得像不匹配的src /资源路径或孤立文件在一棵树上不存在错误。
前面已经说了,这是给你,可能每个项目不同。
例如,检票,这是很平常的,实用的,以保持.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)分离。例如。如果您有翻译团队的项目时,将保持资源与代码,并与不同的供应链管理权限分隔的字符串。