如何组织java项目中类路径上可用的非源代码资源?

如何组织java项目中类路径上可用的非源代码资源?,java,resources,classpath,structure,Java,Resources,Classpath,Structure,在用java编写的软件项目中,您通常拥有资源,这些资源是项目的一部分,应该包含在类路径中。例如,一些模板或图像,应该可以通过类路径getResource访问。这些文件应该包含在生成的JAR文件中 很明显,这些资源应该添加到修订控制系统中。但是你把这些文件放在哪个目录中呢?与java源文件并行,或者在另一个目录中复制所需的包结构?就我个人而言,如果它们与代码的特定部分密切相关,并且数量不太多,我更喜欢将它们与源代码放在一起 但是,如果这些文件有自己的组织结构是有意义的,或者如果有数百个文件很难在其

在用java编写的软件项目中,您通常拥有资源,这些资源是项目的一部分,应该包含在类路径中。例如,一些模板或图像,应该可以通过类路径getResource访问。这些文件应该包含在生成的JAR文件中


很明显,这些资源应该添加到修订控制系统中。但是你把这些文件放在哪个目录中呢?与java源文件并行,或者在另一个目录中复制所需的包结构?

就我个人而言,如果它们与代码的特定部分密切相关,并且数量不太多,我更喜欢将它们与源代码放在一起


但是,如果这些文件有自己的组织结构是有意义的,或者如果有数百个文件很难在其中找到源代码,我会将它们分开。

就我个人而言,如果它们与代码的特定部分密切相关,我更愿意将它们与源代码放在一起,如果不是太多的话

但是如果这些文件有自己的组织结构是有意义的,或者如果有数百个文件很难在其中找到源代码,我会将它们分开。

将它们放入src/main/resources/Java代码将转到src/main/Java/。主要原因是Maven可以用各种语言编译代码,将它们分开是有意义的,这样一个编译就不会被另一个编译的文件所混淆

对于资源,Maven将在它们添加到Jar之前替换其中的变量,因此它们也是编译源代码。

将它们放入src/main/resources/Java代码将转到src/main/Java/。主要原因是Maven可以用各种语言编译代码,将它们分开是有意义的,这样一个编译就不会被另一个编译的文件所混淆


对于资源,Maven将在将它们添加到Jar之前替换其中的变量,因此它们也是编译源代码。

我更喜欢后一种解决方案:一个模仿源代码包结构的单独目录。这样,它们就不会破坏您的源代码,而是正好位于打包JAR文件中已编译类文件的旁边。

我更喜欢后一种解决方案:一个模仿源代码包结构的单独目录。这样一来,它们就不会破坏您的源代码,而是正好位于打包JAR文件中已编译类文件的旁边。

这取决于您的首选项。将它们与源代码文件混合使用可以使重构(如重命名软件包)变得更容易,因为资源与源代码一起移动,但是如果有多个图标、图像和本地化文件,您很容易就会得到一堆文件

对于今天的工具来说,这也并不重要。无论您使用Eclipse、Netbeans还是其他工具,它们都允许您使用与源代码不同的布局的二进制软件包。所以最终你可以随心所欲


就我个人而言,我尽量避免将源代码与资源混用,因为我通常很少更改资源,但经常更改源代码。

这取决于您的偏好。将它们与源代码文件混合使用可以使重构(如重命名软件包)变得更容易,因为资源与源代码一起移动,但是如果有多个图标、图像和本地化文件,您很容易就会得到一堆文件

对于今天的工具来说,这也并不重要。无论您使用Eclipse、Netbeans还是其他工具,它们都允许您使用与源代码不同的布局的二进制软件包。所以最终你可以随心所欲


就我个人而言,我尽量避免将源代码与资源混用,因为我通常很少更改资源,但会频繁更改源代码。

如果构建工具不感到困惑,可以将这些内容放在类路径中。Eclipse不会尝试编译您的JPEG,Ant也不会,所以不需要太多担心。很好的一点是,如果你有很多相关的东西,你可以把它们放在一起,按功能而不是按文件类型来组织


我们在我工作的地方这样做;我们有需要一些代码和少量静态资源的电子邮件消息。所有这些东西都保存在java源路径的一个文件夹中;我们可以轻松地从系统中添加和删除电子邮件,而不会忘记某些事情或犯错误,例如src/资源路径不匹配或一棵树中的孤立文件不存在于另一棵树中。

如果构建工具没有混淆,您可以将这些事情放在类路径中。Eclipse不会尝试编译您的JPEG,Ant也不会,所以不需要太多担心。好的是,如果你有很多相关的东西,你可以把它们放在一起,按功能组织成oppo sed按文件类型设置为


我们在我工作的地方这样做;我们有需要一些代码和少量静态资源的电子邮件消息。所有这些东西都保存在java源路径的一个文件夹中;我们可以轻松地从系统中添加和删除电子邮件,而不会忘记某些事情或犯错误,例如src/资源路径不匹配或一棵树中的孤立文件不存在于另一棵树中。

我通常会这样做:

project/src
project/resources
project/classes
project/lib
project/dist
src和resources都有包结构,构建文件将类和资源作为jar的输入,jar放在dist中

在内部运行时,类路径类似于:lib;班级;资源


如果应用程序已安装,安装程序将创建资源目录,并将其完整地放置在安装中。

我通常这样做:

project/src
project/resources
project/classes
project/lib
project/dist
src和resources都有包结构,构建文件将类和资源作为jar的输入,jar放在dist中

在内部运行时,类路径类似于:lib;班级;资源


如果应用程序有安装程序,安装程序将创建资源目录并将其完整地放置在安装程序中。

如前所述,这取决于您,并且每个项目可能有所不同。 例如,对于,将.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>

保持资源分离的主要原因是工作角色的不合理分离。例如,如果您有一个与翻译团队合作的项目,您将保留字符串与代码分开的资源,并具有不同的SCM权限。

如前所述,这取决于您,每个项目可能有所不同。 例如,对于,将.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>
保持资源分离的主要原因是工作角色的不合理分离。例如,如果您有一个与翻译团队合作的项目,您将使用字符串将资源与代码分开,并使用不同的SCM权限