使用 Maven 部署 jar 文件和外部资源文件
Deploying a jar file and external resource files with Maven
我是 Maven 的新手,想通过自动将几个文件和文件夹部署到生产环境来自动执行一些构建步骤:
my-app-0.7.0-jar-with-dependencies.jar (main application file)
conf.properties (configuration file that can be edited on the fly)
files_folder (folder that contains html, css etc. that can be edited on the fly)
我的项目结构是这样的:
src
main
java
resources (contains resources that should be included in the .jar)
conf.properties.jar
files_folder
.
我首先在 pom.xml
中添加 <resources>
元素
<resources>
<resource>
<directory>.</directory>
<includes>
<include>conf.properties</include>
<include>files_folder/**/*.*</include>
</includes>
<targetPath>..</targetPath>
</resource>
</resources>
这会将 conf.properties
和 files_folder
移动到 target
目录,这很好(我可以复制 .jar、conf.properties 和 files_folder 以及 运行他们)。
但是这些文件不会移动到 C:\Users\my_name\.m2\...
中的本地存储库或外部存储库(在安装和部署阶段)。
我的想法是应该将这些资源移至存储库,因为:
- 它们是程序 运行
所必需的
- 可以非常快速地回滚到任何以前的版本(只要找到版本文件夹,你需要的一切都会在那里;如果 conf.properties 和 files_folder 就不会那么容易了不会自动包含在其中)
所以主要问题是:
- 这样的思路合理吗?
- 如果合理,如何将这些外部资源包含在存储库中?
像其他回复一样,我建议您需要查看持续集成方法。我之前有过与 Jenkins 合作的良好经验。它是免费的,并且具有很多功能。它还拥有一个开发了一系列插件的大型社区:
https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins
根据您要部署的内容和部署方式,一些可能对您的流程有帮助的插件是:
您可以将这些文件保存在 src/main/resources/META-INF,而不是将这些文件保存在类路径中。因此,当您使用 Maven 构建项目时,如果您选择了包装作为 ear
<artifactId>ProjectName</artifactId>
<version>Version</version>
<packaging>ear</packaging>
然后所有这些文件都将打包在 jar 中,并将在您的 maven 存储库中可用
Maven 是构建工具而不是部署工具。对于测试、问答或生产等环境的部署,其他工具更合适,如 Chef、Puppet 或者可能只是一个简单的 shell 脚本等
我是 Maven 的新手,想通过自动将几个文件和文件夹部署到生产环境来自动执行一些构建步骤:
my-app-0.7.0-jar-with-dependencies.jar (main application file)
conf.properties (configuration file that can be edited on the fly)
files_folder (folder that contains html, css etc. that can be edited on the fly)
我的项目结构是这样的:
src
main
java
resources (contains resources that should be included in the .jar)
conf.properties.jar
files_folder
.
我首先在 pom.xml
<resources>
元素
<resources>
<resource>
<directory>.</directory>
<includes>
<include>conf.properties</include>
<include>files_folder/**/*.*</include>
</includes>
<targetPath>..</targetPath>
</resource>
</resources>
这会将 conf.properties
和 files_folder
移动到 target
目录,这很好(我可以复制 .jar、conf.properties 和 files_folder 以及 运行他们)。
但是这些文件不会移动到 C:\Users\my_name\.m2\...
中的本地存储库或外部存储库(在安装和部署阶段)。
我的想法是应该将这些资源移至存储库,因为:
- 它们是程序 运行 所必需的
- 可以非常快速地回滚到任何以前的版本(只要找到版本文件夹,你需要的一切都会在那里;如果 conf.properties 和 files_folder 就不会那么容易了不会自动包含在其中)
所以主要问题是:
- 这样的思路合理吗?
- 如果合理,如何将这些外部资源包含在存储库中?
像其他回复一样,我建议您需要查看持续集成方法。我之前有过与 Jenkins 合作的良好经验。它是免费的,并且具有很多功能。它还拥有一个开发了一系列插件的大型社区:
https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins
根据您要部署的内容和部署方式,一些可能对您的流程有帮助的插件是:
您可以将这些文件保存在 src/main/resources/META-INF,而不是将这些文件保存在类路径中。因此,当您使用 Maven 构建项目时,如果您选择了包装作为 ear
<artifactId>ProjectName</artifactId>
<version>Version</version>
<packaging>ear</packaging>
然后所有这些文件都将打包在 jar 中,并将在您的 maven 存储库中可用
Maven 是构建工具而不是部署工具。对于测试、问答或生产等环境的部署,其他工具更合适,如 Chef、Puppet 或者可能只是一个简单的 shell 脚本等