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