2016-09-22 3 views
2

У меня возникает очень странный вопрос при использовании профиля в maven.Код сегмента ниже.Как понять значение! False в профиле maven

<profile> 
     <id>update-jboss-as</id> 
     <activation> 
      <property> 
       <name>release</name> 
      </property> 
     </activation> 
     <modules> 
      <module>ddd-djn</module> 
      <module>jboss-as</module> 
     </modules> 
    </profile> 

Я не установил release собственности, поэтому этот профиль не может быть активирован, модуль не будет выполняться, теперь все в порядке.

но когда я добавить строку кода и сегмент кода, как показано ниже:

<profile> 
     <id>update-jboss-as</id> 
     <activation> 
      <property> 
       <name>release</name> 
       <value>!false</value> 
      </property> 
     </activation> 
     <modules> 
      <module>ddd-djn</module> 
      <module>jboss-as</module> 
     </modules> 
    </profile> 

новый добавлен контент является <value>!false</value>

на мой взгляд, профиль не будет активирован либо. Он будет активирован только там release Недвижимость и его значение не false, и здесь я не установил свойство release. Как ни странно, на практике этот профиль активирован.

Вопрос: Я не знаю, почему это происходит, возможно, значение !false имеет уникальное значение?

+0

Вы можете попытаться переименовать название свойства? Я вроде вспоминаю «релиз» - это особое свойство (но я не могу найти никакой информации об этом ... dunno, почему у меня такая память: P), или, в POM или родительских POM, существует ли какое-либо свойство «release» ? Я думаю, вы можете попросить Maven выпустить эффективный POM, чтобы проверить его. –

+0

@AdrianShum это ошибка, основанная на моем расследовании. Проверьте мой ответ. –

+1

@AdrianShum Я должен исправить, следуя [отчет об ошибке] (https://issues.apache.org/jira/browse/MNG-6094). Я сообщил, что это не ошибка, а скорее неправильный doc –

ответ

2

Вопрос воспроизводит с именем и значением:

<profile> 
    <id>test-profile</id> 
    <activation> 
     <property> 
      <name>something</name> 
      <value>!a</value> 
     </property> 
    </activation> 
    ... 
</profile> 

Профиль выше фактически будет активен по умолчанию. Это находится в противоречии с официальной Maven profile documentation на примере с !true значения:

следующий профиль будет активирован, когда системное свойство «отладка» определяется со значением, которое не является «истинным».

Примечание: жирным является мой.

Поскольку такое имя свойства (любой) не наследуются потенциальной собственностью по умолчанию, определенной в super POM, то на самом деле это не определен и как таковое оно не должно соответствовать условию. Однако представляется, что оператор ! играет важную роль, добавляя к правилу также случай активации профиля, когда свойство не указано (как таковое, не указывая, также означает, что оно не обеспечило значение, соответствующее условию value , но на самом деле небольшое изменение части name).


Если механизм еще реализуется SystemPropertyProfileActivator, одобряется, но не документировано, по которым componenet он был заменен, если он уже заменен, то ошибка подтверждается следующим укороченным кодом:

ActivationProperty property = activation.getProperty(); 

if (property != null) { 
    String name = property.getName(); 
    boolean reverseName = false; 

    String sysValue = properties.getProperty(name); 

    String propValue = property.getValue(); 
    if (StringUtils.isNotEmpty(propValue)) { 
     boolean reverseValue = false; 
     if (propValue.startsWith("!")) { 
      reverseValue = true; 
      propValue = propValue.substring(1); 
     } 

     // we have a value, so it has to match the system value... 
     boolean result = propValue.equals(sysValue); 

     if (reverseValue) { 
      return !result; 
     } 
     else { 
      return result; 
     } 
    } 
} 

Выпуск: значение недвижимого имущества sysValue по определенному name не учитывается, оно будет null в данном конкретном случае. Однако его проверка на equals вернет false, но затем дальнейшая проверка на reverseValue превратит ее в true, независимо от наличия свойства name и эффективной активации профиля в этом случае.


Update
После связанной bug report я сообщил на официальном Maven JIRA, этот вопрос был выяснен: это не ошибка, а неправильная документация.
Следовательно, ожидаемое поведение действительно должно иметь профиль по умолчанию с такой конфигурацией.

+0

Для этого я создал [официальный отчет об ошибке] (https://issues.apache.org/jira/browse/MNG-6094). –

+1

Спасибо :) и поздравляю, достигнув 10k! – Tunaki

+0

@Tunaki спасибо! и спасибо за разъяснение официального документа! –

Смежные вопросы