【问题标题】:Maven Resources Plugin: Build won't fail if directory doesn't existsMaven 资源插件:如果目录不存在,构建不会失败
【发布时间】:2019-04-23 10:38:21
【问题描述】:

在我的 pom.xml... 我有以下配置:
构建插件:

<plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <executions>
    <execution>
      <id>copy-resources</id>
      <phase>validate</phase>
      <goals>
        <goal>copy-resources</goal>
      </goals>
      <configuration>
        <outputDirectory>${build.directory}/classes/static/</outputDirectory >
        <resources>
          <resource>
            <!-- this is defined in profiles -->
            <directory>${myResourceFolder}</directory>
          </resource>
        </resources>
      </configuration>
    </execution>
  </executions>
</plugin>


配置文件定义:

<profiles>
  <profile>
      <id>development</id>
      <activation>
        <!-- this profile is active by default -->
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <myResourceFolder>/myDevelopmentFolder</myResourceFolder>
      </properties>
  </profile>
  <profile>
      <id>production</id>
      <properties>
        <myResourceFolder>${env.MY_PRODUCTION_FOLDER}</myResourceFolder>
      </properties>
  </profile>
</profiles>


其中 ${myResourceFolder} 在不同的配置文件中定义,可以是:

  • /myDevelopmentFolder
  • MY_PRODUCTION_FOLDER

其中“/myDevelopmentFolder”是我的本地开发文件夹,“MY_PRODUCTION_FOLDER”是在生产构建中定义为环境变量的任何文件夹。
这些配置编译得很好。
但我想要实现的是,如果缺少这个文件夹中的任何一个,

maven-resources-plugin 应该会失败。


有没有办法在 Maven 中实现这一点?

谢谢,
阿塔尼斯

【问题讨论】:

    标签: java eclipse maven


    【解决方案1】:

    1) 首先,我认为为不同的环境构建不同的二进制文件是不好的方法。最好捆绑所有资源并在运行时使用适当的资源

    2) 如果您仍然想走这种错误的方式,那么您可以尝试在丢失的文件 (https://maven.apache.org/guides/introduction/introduction-to-profiles.html) 上激活配置文件。这个“构建破坏者”配置文件应该以某种方式破坏构建。例如,它可能包括 Maven Enforcer 插件 (https://maven.apache.org/enforcer/maven-enforcer-plugin/usage.html),它禁止带有解释性消息的资源插件

    【讨论】:

    • 我完全不同意你的观点,你现在在哪里可以找到这样的东西?仅以角度和弹簧靴集成为例? angular 在哪里部署到 springboot(或只是普通的 apache tomcat)服务器?
    • 最后,它不一定是二进制文件,它可以是图片或图像,其中开发有占位符图像,生产有实际图像。你仍然认为这是错误的吗?
    • “angular 部署到 springboot 的位置”——我不建议这样做。但是,if 你将 Angular 的东西捆绑到 SpringBoot jar then 它应该是一个适用于所有环境的捆绑包。顺便说一句,你为什么用 Maven 管理 Angular 的东西?他们有npm 用于此类事情的工具。 “最后,不必是二进制文件”——我的意思是,如果你构建了一些要部署的包,那么它应该是部署在任何地方的同一个包。否则就自找麻烦。
    • 我没有使用 Maven 管理 Angular。就是我的网络服务器是一个springboot应用程序。我正在将它部署到 springboot 容器中。如果您不建议这样做...互联网上已经有大量示例...
    • “我的 web 服务器是一个 springboot 应用程序”-我的观点必须有一个(==相同)jar 文件部署到每个环境-开发、uat、prod 等对我来说,您似乎正在尝试根据所选配置文件构建不同的 jar 文件。如果你不这样做,请忽略我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2011-02-28
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2011-01-22
    • 2015-03-13
    相关资源
    最近更新 更多