What is the expected result of having several identical <property> tags in a changelog?

Suppose I have a changelog A.  Then suppose I have a changelog B that includes A using the tag.

Suppose A defines this:

And suppose B does this:

I would expect there to be no problem (haven’t tried it yet).

Now suppose B does this:

Does A’s view of the “foo” property resolve to “bar” or “someothervalue”?  I would expect–from the way I think Liquibase works here–that (in the absence of System properties etc.) A would “see” “bar”, not “someothervalue”.  Right?


There is just global properties in liquibase, they are not scoped to the changeset.  They also work like they do in Ant.  Once a property is defined, future attempts to set it are no-ops.  

So if you define B as:


Nathan, there are several typos here; I want to make sure I understand you correctly.

I am assuming that your summary is the specification–i.e. that that’s the way it is supposed to work.  That is, the first property declaration encountered by Liquibase during parsing that applies to the current database is the one that will win, regardless of inclusions, “dbms” markers, etc.

So on an Informix database, for example, I’d expect the following property declarations:

…to result–when dereferenced–in the following value:

  1. informixOnly

…is that correct?

And I’d expect the following property declarations:

  1. allOtherDatabases

…is that correct?



Yes, that is correct.  Let me know if you aren’t seeing that behavior in real life.