如何在 Maven 构建中包含随机文件以在 AWS EBS 上部署 WAR 文件?

Posted

技术标签:

【中文标题】如何在 Maven 构建中包含随机文件以在 AWS EBS 上部署 WAR 文件?【英文标题】:How do I include a random file in a Maven build for a WAR file to be deployed on AWS EBS? 【发布时间】:2019-04-17 18:02:16 【问题描述】:

我找到了这个答案https://serverfault.com/a/822596/123651

我需要在我的 WAR 中包含一个随机文件 \.ebextensions\nginx\conf.d\elasticbeanstalk\force-https.conf 以部署在 AWS ElasticBeanstalk 控制台上。如何在mvn package 命令中包含此文件? ElasticBeanstalk 将如何在 WAR 中读取此文件?

我尝试使用这个guide 并添加到我的pom.xml

<build>
  ...
    <resources>
      <resource>
        <directory>.ebextensions/nginx/conf.d/elasticbeanstalk/</directory>
        <includes>
            <include>force-https.conf</include>
        </includes>
      </resource>
    </resources>
</build>

然后运行 ​​mvn package -DskipTeststar tvf target\app-0.0.3-SNAPSHOT.war | less 但它把文件放在错误的地方!

-rw-rw-r--  0 0      0          94 Nov 14 12:40 WEB-INF/classes/force-https.conf

【问题讨论】:

文件应该放在哪里?根据 ServerFault 的回答,它应该在 ZIP 容器中,但在 WAR/JAR 文件之外。 @Compass 是的,这似乎有效。我手动创建了一个包含 WAR 和 .conf 的 zip 文件,它确实有效。那么如何使用 Maven 创建一个 zip 文件呢?现在正在查找... 【参考方案1】:

这行得通。仅制作 2 个文件的 ZIP 似乎过于冗长。

pom.xml
        <plugin> <!-- To add .ebextensions/ Nginx config for ElasticBeanstalk -->
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <descriptors>
              <descriptor>assembly.xml</descriptor>
            </descriptors>
          </configuration>
          <executions>
            <execution>
              <id>make-assembly</id>
              <phase>package</phase>
              <goals>
                <goal>single</goal>
              </goals>
            </execution>
          </executions>
        </plugin>           
assembly.xml
<assembly 
  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <id>bin</id>
  <baseDirectory>/</baseDirectory>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <directory>$project.build.directory</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>*-SNAPSHOT.war</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>$project.basedir</directory>
      <outputDirectory>/.ebextensions/nginx/conf.d/elasticbeanstalk/</outputDirectory>
      <includes>
        <include>force-https.conf</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

而且配置文件就在项目根目录下。我不知道该放在哪里——它不是源代码。

force-ssl.conf
if ($http_x_forwarded_proto = 'http') 
    return 301 https://$host$request_uri;

http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

【讨论】:

不幸的是,这会破坏 Spring Boot 应用程序并导致正确路径的 404 错误。

以上是关于如何在 Maven 构建中包含随机文件以在 AWS EBS 上部署 WAR 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置maven以在不同环境中使用不同的log4j.properties文件

如何在 build.gradle 文件中设置属性以在 Java 中访问该属性

如何构建包含 ListView.Builder 的自定义行,以在颤动中构建 ElevatedButton?

如何从 S3 加载泡菜文件以在 AWS Lambda 中使用?

配置 Maven 或 Nexus 以在静态 URL 链接主干工件

AWS CloudFormation 更新 Lambda 代码以在 S3 存储桶中使用最新版本