【问题标题】:Assembling java project with Maven使用 Maven 组装 java 项目
【发布时间】:2011-03-16 19:27:48
【问题描述】:

我的问题有 3 个部分,短、长和附加。我将从简短的开始:

是否有任何好的教程/示例如何组装某种典型的(例如 apache 之类的组装?)我的意思是教程将解决如何使用 eclipse 开发应用程序并最终将其放入漂亮的目录结构中,例如:

垃圾箱
会议

许可证.txt

问题的主要部分是:如何适当地放置我的 log4j.properties 而不会弄乱我的最终装配?我知道有很多答案,例如“将其放入 src/main/resources”,我做到了,它现在正在开发中工作。我将所有配置文件放入 src/main/resources 中,因为我只是通过类路径 (.getClassLoader().getResourceAsStream(name);) 加载配置文件,并且我认为这是最佳实践。但是当我将它放入 src/main/resources 文件夹时,当我运行 mvn package 时,log4j.properties 会被放入 jar 中。但这完全不是我想要的。我想要一个漂亮干净的 jars,最后当软件打包时 log4j.properties 将位于 conf 目录中,而 conf, 目录将以某种方式位于类路径中。

另外一个问题是:我通过类路径解决配置加载的方法好吗?我的想法是,我想避免陷入开发/生产路径差异的麻烦。当我假设配置将在 CP 上时,一切都会变得容易得多。

【问题讨论】:

    标签: java maven assemblies


    【解决方案1】:

    我将在最后一部分评论如何加载配置文件。将配置文件放在类路径中在 Java 中被广泛使用。如果配置在部署时固定并且文件可以嵌入到 jar 中,则此方法效果很好,但根据我的经验,如果稍后更改配置,它会产生比解决问题更多的麻烦。

    这主要有两个原因。首先,它使准确了解实际使用的配置文件和调试配置问题变得更加困难。类路径中可能包含多个目录,jar(或另一个 jar)中可能有文件等。类加载是 Java 中比较困难的主题之一,对于那些应该实际改变配置。最好有一个固定的配置文件应该在的位置,在这个位置的日志文件中写一行,如果文件丢失,则创建一个错误。

    其次,类路径中的配置文件有时会放在与读取文件的类匹配的包中。这是类路径资源的自然和最佳实践,但它要求您在配置所在的目录中创建一组匹配的文件夹。这让那些应该创建或编辑文件的人更加困难。

    Log4j 为您提供了一个选项,您可以在启动 java 时在命令行中指定 log4j 文件。我总是使用该选项来指定我的 log4j 配置文件的确切位置。

    【讨论】:

    • 那么,您建议如何解决典型应用程序在开发过程中的配置加载以及如何过渡到生产环境?我的配置文件在部署时肯定不是固定的。根据您的说法,我不应该将配置文件放到 src/main/resources 中。那么在哪里?如何解决此配置文件在生产与开发环境中的路径相关性?因为....开发目录结构应该与生产结构有很大不同。
    • 嗯,这就是我的看法。大多数应用程序需要一个配置文件夹和一个数据文件夹。您可以将文件夹的位置指定为启动参数,也可以使用“众所周知的”标准位置。 IE。在 Linux 环境中,将配置文件放在 /etc 或用户主目录中是很常见的,而数据文件可能放在 /var 下的目录或用户主目录中。我更喜欢那个解决方案。
    • 嗯,是的,这似乎合乎逻辑。但在 Casssandra 或 Apache ant 或 Apache Web 服务器等典型应用程序中,您有 conf 目录,您可以在那里设置内容,而不是在常见的“等”位置。他们如何使它透明?他们是否使用诸如路径相对性之类的简单方法?即:“../../conf/config.properties”
    【解决方案2】:

    使用 maven-assembly-plugin 通过组合依赖项、类、src、资源和工件来创建存档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 2015-10-21
      • 2016-07-29
      • 1970-01-01
      相关资源
      最近更新 更多