首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么<value>!0</ value >匹配默认值0?

为什么<value>!0</ value >匹配默认值0?
EN

Stack Overflow用户
提问于 2018-01-12 21:44:28
回答 1查看 61关注 0票数 0

我正在尝试设置一个.pom文件,如果forkCount是0,它将使用一个插件,而另一个插件则使用不同的插件。此外,我希望0是默认值。换句话说,我想

mvn run_testsmvn -DforkCount=0 run_tests都使用插件"A",其中mvn run_tests -DforkCount=5将使用插件"B“。

我有一个包含以下部分的.pom文件:

代码语言:javascript
复制
<project ...>
   ...
   <properties>
      <forkCount>0</forkCount>
   </properties>
   ...
   <profiles>
      <profile>
          <!-- if forkCount==0, don't invoke any of the parallel execution configuration -->
          <id>no-parallel-execution</id>
          <activation>
             <property>
               <name>forkCount</name>
               <value>0</value>
             </property>
          </activation>
          <build>
             <plugins>
               <plugin>
                  <! --- nothing in here references forkCount --> 
               </plugin>
             </plugins>
          </build>
      </profile>
    <profile>
    <profile>
       <!-- forkCount!=0, use the parallel execution configuration -->
       <id>parallel-execution</id>
       <activation>
          <property>
             <name>forkCount</name>
             <value>!0</value>
          </property>
       </activation>
       <build>
          <plugins>
             <plugin>
                ...
                <configuration>
                    ...
                    <forkCount>${forkCount}</forkCount>
                    ...
                 </configuration>
              </plugin>
          </plugins>
        </build>
      ...

上面只包含了对forkCount的引用。

如果我在命令行上为forkCount传递一个值(即当forkCount为0时使用插件"A“,而使用插件"B”,则一切都如预期的那样工作)。但是,如果我运行mvn run_tests,那么插件"B“就会被激活,尽管${forkCount}的值为0。到底怎么回事?

不管它值多少钱:

代码语言:javascript
复制
>mvn -DforkCount=0 clean verify help:active-profiles
The following profiles are active:
    - no-parallel-execution (source: ....


>mvn clean verify help:active-profiles
The following profiles are active:
  - parallel-execution (source: ....
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 23:17:04

试一试

代码语言:javascript
复制
mvn -DforkCount=0 help:active-profiles

要验证您真正想要激活的配置文件是活动的(而您真正不想激活的配置文件是活动的)。

-更新答案以容纳新资料--

感谢对答案的更新,这个问题现在似乎很清楚了。

我相信问题是"“不是"0”。有了这个理解,这就意味着"!0“将在'‘或缺少的forkCount值上激活。

我的测试证实了这种解释。

也许您可以使用更多的配置文件重做此操作。一个用于检测未设置的属性的条件,另一个用于检测属性为零的条件。这两个配置文件都可能留下一个工件,比如$target目录中的一个已触摸的文件。然后,您可能会使用这个文件来知道您正在执行一个单线程调用,而没有该文件,则是一个多线程调用。

用来确认这些想法的代码

代码语言:javascript
复制
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>edwinbuck.com</groupId>
  <artifactId>example-properties</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <profiles>
      <profile>
          <id>unspecified-forkCount</id>
          <activation>
             <property>
               <name>!forkCount</name>
             </property>
          </activation>
      </profile>
      <profile>
          <id>zero-forkCount</id>
          <activation>
             <property>
               <name>forkCount</name>
               <value>0</value>
             </property>
          </activation>
      </profile>
      <profile>
         <id>parallel-execution</id>
         <activation>
            <property>
               <name>forkCount</name>
               <value>!0</value>
            </property>
         </activation>
      </profile>
   </profiles>
</project>

用于确认这些想法的命令行调用

代码语言:javascript
复制
mvn help:active-profiles
mvn -DforkCount=0 help:active-profiles
mvn -DforkCount=3 help:active-profiles

结果

代码语言:javascript
复制
profiles: unspecified-forkCount parallel-execution
profiles: zero-forkCount
profiles: parallel-execution
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48234412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档