当前位置: 首页 > 知识库问答 >
问题:

Maven不随机筛选资源

微生智刚
2023-03-14

这有点让人抓狂,在与Maven合作的几年里,我从未见过这种情况发生。一个简单的项目(不是我自己写的)会随机失败过滤资源,我不知道是什么导致了它。我不能共享项目源代码,但我会尽可能多地共享POM。请记住,问题不在于代码,而在于Maven随机决定不过滤资源。

我最初在POM的build标签中配置了这个:

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>

在我的src/main/资源目录中,我有一个名为spring-config.xml.的文件。这个文件有几个属性,应该用Maven配置文件属性替换。我已经像这样配置了我的构建配置文件:

<profile>
  <id>stage</id>
  <properties>
    <env.name>STAGE</env.name>
    <db.url>jdbc:oracle:thin:@xxx.xxx.com:1521:xxx</db.url>
  </properties>
</profile>

要构建,我运行以下命令:

mvn clean package -P stage

现在,这个项目使用Spring,并且它使用相同的Spring配置进行测试和执行,因此上下文将在运行测试用例时创建数据库连接。大多数时候,构建将完成,测试用例将通过。然而,大约有1次测试用例会失败,因为属性没有被替换,Spring试图连接到“${db.url}”,而不是“jdbc:oracle:thin:@xxx.xxx.com:1521:xxx”。

奇怪的是,尽管刚刚通过测试用例,打包的JAR大约十分之九会出现同样的问题。我检查了目标/类目录,那里的文件也有完全相同的问题。我发现Maven资源插件在构建生命周期的某个时间点发生了一些奇怪的事情,也许它错误地覆盖了文件。

在Maven生命周期中,顺序是编译-

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <configuration>
      <encoding>UTF-8</encoding>
    </configuration>
    <executions>
      <execution>
        <id>this-is-silly</id>
        <phase>compile</phase>
        <goals>
          <goal>resources</goal>
        </goals>
      </execution>
      <execution>
        <id>why-must-i-exist</id>
        <phase>test</phase>
        <goals>
          <goal>resources</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

这似乎一直在发挥作用,但我仍然不知道为什么我需要为过去几年我所从事的几十个项目中的一个项目这样做。我以前从未见过Maven断断续续地做某事,这让我担心它会再次崩溃。如有任何想法,将不胜感激。

共有1个答案

澹台权
2023-03-14

正如泰勒在上面的评论中写道:

您是否同时运行eclipse或类似的软件?它可能会覆盖maven筛选的资源,试图“有所帮助”。

问题是运行eclipse。根据您的eclipse配置(m2e yes/no),eclipse将在决定刷新您的项目后简单地覆盖您的资源文件。

这可以通过使用Eclipse-Maven集成(与Eclipse:Eclipse相反)来解决,后者“动态”地对资源进行正确的过滤

或者,当然,通过在构建时停止日食,这作为工作流模型并不真正可行。

 类似资料:
  • 我正在运行一个简单的maven项目(Maven3.3.9),其中包含配置文件和资源筛选。似乎总是在默认配置文件上进行筛选。 src/main/filters(默认)中有两个配置文件:config-dev.properties和config-prod.properties(仅包含一个变量application.env=development application.env=production 和s

  • 我有一个SpringBoot项目(maven/java8)。 我想通过Maven配置文件(dev.properties|prod.properties)过滤src/main/Resources/application.properties中的一些自定义变量 Maven命令: 应用属性: 开发属性: prod.properties: pom.xml:

  • 我正在尝试从以下枚举中筛选,以根据随机机会选择其中一个值。 目前,我正在使用此代码选择一个值。 还有我的随机效用函数 目前,大多数情况下,它将准确地选择一个没有问题的层值。然而,大约在的时候,我会得到一个索引arrayoutofbounds。 我知道这是因为枚举中的机会分散到很远的地方(因为如果我向枚举添加更多值,机会不会像它们那样分散,那么就不会发生此异常)。 如何修复此错误?或者有更好的方法

  • 我有以下pom.xml: 注意,上的元素被注释掉了 在中还有以下内容 因此,我希望Maven做的只是用替换,除非开发配置文件被激活,否则我希望Maven用替换 当我运行时,它将值设置为。很好,资源筛选工作正常。 但是,当我运行时,它将值设置为 如果取消对配置文件上的元素的注释并运行,则会将设置为 我甚至运行了让它输出活动的配置文件名称,并且在上面的两种情况下,它都表示开发配置文件是活动的,但是如果

  • 问题 你想从一个序列中随机抽取若干元素,或者想生成几个随机数。 解决方案 random 模块有大量的函数用来产生随机数和随机选择元素。 比如,要想从一个序列中随机的抽取一个元素,可以使用 random.choice() : >>> import random >>> values = [1, 2, 3, 4, 5, 6] >>> random.choice(values) 2 >>> random

  • 对于Java和Maven来说有点陌生,但我试图让Maven处理数据库连接属性,以便让Maven构建在dev/stage/prod环境之间更改它们,我遇到了过滤和资源方面的问题。我也不知道我做错了什么。 POM文件: 数据库。属性 Maven版本3.3.8 JDK 1.8.0-72 命令行 错误 任何帮助都将不胜感激。