Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在构建战争期间替换文件内容(maven2)_Java_Maven_Build - Fatal编程技术网

Java 在构建战争期间替换文件内容(maven2)

Java 在构建战争期间替换文件内容(maven2),java,maven,build,Java,Maven,Build,在maven war插件使用文件内容构建war之前,如何替换文件内容 重点是: 在tomcat中,在eclipse和mvn中启动了tomcat:run,我想使用开发配置。它应该在类路径上(例如,在资源文件夹中)。因此,文件应该在测试之前的所有阶段都存在,而不是在包阶段 在bamboo、uat、prod服务器上,我希望删除此配置。它将从类路径提供 但我不想删除该文件。我们使用共享服务器,这样任何人都可以将同名文件放在类路径上(例如application.properties)。所以我希望这个文件

在maven war插件使用文件内容构建war之前,如何替换文件内容

重点是:

  • 在tomcat中,在eclipse和mvn中启动了tomcat:run,我想使用开发配置。它应该在类路径上(例如,在资源文件夹中)。因此,文件应该在测试之前的所有阶段都存在,而不是在包阶段
  • 在bamboo、uat、prod服务器上,我希望删除此配置。它将从类路径提供
  • 但我不想删除该文件。我们使用共享服务器,这样任何人都可以将同名文件放在类路径上(例如application.properties)。所以我希望这个文件在war内部(这样spring就不会在war外部寻找它),但它应该是空的
  • 我不想使用配置文件,因为我想让同一个包在所有环境中工作
所以问题是:如何在构建战争期间(或之前)替换文件内容

https://maven.apache.org/plugins/maven-assembly-plugin/

但这是一种反模式。您最好使用AppServer中的上下文参数和jndi资源。

您可以使用来完成这一点

首先,您必须将特殊文件放在
src/main/resources
文件夹中的一个目录中

然后将一个空文件放在
src/main/resources
文件夹中的另一个文件夹下

这只是一个例子:

. ├── pom.xml └── src └── main ├── java ├── webapp | └── WEB-INF | └── web.xml └── resources ├── prod | └── application.properties └── dev └── application.properties 使用此配置,您将在
target/classes
文件夹中获得不同的文件,具体取决于您使用的目标

mvn test
将把
src/main/resources/dev/application.properties
文件放在
target/classes

mvn package
将把
src/main/resources/prod/application.properties
文件放在
target/classes

mvn package

src/main/resources
下的任何其他资源都将像往常一样被复制和/或过滤。

我将在这里给你一个完全不同的答案,这将使两个不同的文件有可能具有它们自己的配置,然后过滤成一个文件

. ├── pom.xml └── src └── main ├── java ├── webapp | └── WEB-INF | └── web.xml ├── filters | ├── dev.properties | └── prod.properties └── resources ├── application.properties └── other.properties
src/main/filters/dev.properties

someProperty = foo
someOtherProperty = bar
someProperty =
someOtherProperty =
someProperty = ${someProperty}
someOtherProperty = ${someOtherProperty}

src/main/filters/prod.properties

someProperty = foo
someOtherProperty = bar
someProperty =
someOtherProperty =
someProperty = ${someProperty}
someOtherProperty = ${someOtherProperty}

src/main/resources/application.properties

someProperty = foo
someOtherProperty = bar
someProperty =
someOtherProperty =
someProperty = ${someProperty}
someOtherProperty = ${someOtherProperty}


这将提供三个文件供您使用。输出将只有
应用程序。属性

我发现它很容易允许更改文件内容

您能更具体一些吗?请发布文件的摘录和您想要的结果。听起来这是maven资源插件的工作。我用脚本解决了这些类型的问题。我希望有更好的解决办法。:)我想讨论一下jndi和环境变量,但这是一个让人头疼的问题。我们希望该项目能够在eclipse内部启动的tomcat、mvn tomcat:run以及生产服务器上运行。没有任何繁琐、重复的dev环境配置是的,我也考虑过这一点,但在eclipse中按名称打开资源时,看到的不是一个文件而是两个文件,这也很烦人。你得想想哪一个是真的one@piotrek根据你的规格,一个文件是空的,对吗?是的。但是,当您键入“appl”并且eclipse向您显示包含两个文件的窗口时,您必须读取路径,选择正确的路径。而不是仅仅点击回车键。这就是为什么我不希望他们有相同的名字尼斯。我没想过。它将再产生1级间接寻址(因为我需要从war之外的类路径读取生产配置),但对于idea来说是+1
mvn package