Dev environment for 12 release

32 views
Skip to first unread message

Kanat Mergenbayev

unread,
Dec 30, 2025, 12:32:30 PM (yesterday) Dec 30
to iDempiere

Hello everyone,

I’m trying to set up a development environment using idempiere-dev-setup (workspace creation + dev environment).

During startup I’m getting the following error:

DB.isBuildOK: Build Version Error

What I’ve done so far:

  • Using iDempiere 12

  • Created a new empty database

  • Running the standard dev-setup scripts to initialize the workspace

It looks like the system is failing the build/version check even on a fresh database.

Has anyone experienced the same issue with version 12?
Is there an additional step required to initialize or migrate the database before running the dev setup? Maybe I’m missing something obvious.

Any guidance or pointers would be appreciated.

Thank you in advance.

Stack trace

The program assumes build version 12.0.0.202512301702, but database has build version ${env.ADEMPIERE_VERSION} 20080428-1232.
This is likely to cause hard to fix errors.
Please contact administrator. [1]
22:06:33.257-----------> DB.isBuildOK: Build Version Error
The program assumes build version 12.0.0.202512301702, but database has build version ${env.ADEMPIERE_VERSION} 20080428-1232.
This is likely to cause hard to fix errors.
Please contact administrator. [1]
22:06:33.260 SignDatabaseBuildApplication.start: Sign Database Build [1]
22:06:33.263 SignDatabaseBuildApplication.start: ------------------- [1]
22:06:33.263 SignDatabaseBuildApplication.start: Version = 12.0.0.202512301702 [1]
Version = 12.0.0.202512301702
22:06:33.264 SignDatabaseBuildApplication.start: UPDATE AD_System SET LastBuildInfo = ? [1]
UPDATE AD_System SET LastBuildInfo = ?
22:06:33.269 PreparedStatementProxy.invoke: Dec 30, 2025, 10:06:33 PM ALMT,Update,AD_SYSTEM, (begin) [1]
22:06:33.270 PreparedStatementProxy.invoke: Dec 30, 2025, 10:06:33 PM ALMT,Update,AD_SYSTEM, (end) [1]
22:06:33.274 BaseActivator.log: Weaving class org.slf4j.event.Level [265]
22:06:33.275 BaseActivator.log: Weaving class org.slf4j.helpers.MessageFormatter [265]
22:06:33.276 BaseActivator.log: Weaving class org.slf4j.helpers.NormalizedParameters [265]
22:06:33.276 BaseActivator.log: Weaving class org.slf4j.helpers.FormattingTuple [265]
22:06:33.276 HikariPool.logPoolState: HikariPool-1 - After adding stats (total=2/90, idle=2/10, active=0, waiting=0) [265]
22:06:33.276 PoolBase.newConnection: HikariPool-1 - Attempting to create/setup new connection (3e9ba5ed-0bce-456f-807b-e5f630f974ff) [265]
22:06:33.276 Driver.connect: Connecting with URL: {0} (jdbc:postgresql://localhost:5432/idempiere?encoding=UNICODE&ApplicationName=iDempiere&tcpKeepAlive=true) [265]
22:06:33.277 PgConnection.<init>: PostgreSQL JDBC Driver 42.7.8 [265]
22:06:33.277 PgConnection.setDefaultFetchSize: setDefaultFetchSize = {0} (0) [265]
22:06:33.277 PgConnection.setPrepareThreshold: setPrepareThreshold = {0} (5) [265]
22:06:33.277 ConnectionFactoryImpl.openConnectionImpl: Trying to establish a protocol version 3 connection to {0} (localhost:5432) [265]
22:06:33.277 ConnectionFactoryImpl.tryConnect: Receive Buffer Size is {0} (408300) [265]
22:06:33.277 ConnectionFactoryImpl.tryConnect: Send Buffer Size is {0} (146988) [265]
22:06:33.283 PoolBase.newConnection: HikariPool-1 - Established new connection (3e9ba5ed-0bce-456f-807b-e5f630f974ff) [265]
22:06:33.283 HikariPool.call: HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@5aa4c249 [265]
22:06:33.287 BaseActivator.log: Unregistered: {org.apache.logging.log4j.util.PropertySource}={serviceloader.mediator=107, service.id=40, service.bundleid=54, service.scope=bundle, .org.apa
che.aries.spifly.provider.implclass=org.apache.logging.log4j.util.EnvironmentPropertySource, .org.apache.aries.spifly.provider.discovery.mode=SERVICELOADER_CAPABILITIES} [267]
22:06:33.287 BaseActivator.log: Unregistered: {org.apache.logging.log4j.util.PropertySource}={serviceloader.mediator=107, service.id=41, service.bundleid=54, service.scope=bundle, .org.apa
che.aries.spifly.provider.implclass=org.apache.logging.log4j.util.SystemPropertiesPropertySource, .org.apache.aries.spifly.provider.discovery.mode=SERVICELOADER_CAPABILITIES} [267]
22:06:33.287 BaseActivator.log: Unregistered: {org.apache.logging.log4j.spi.Provider}={serviceloader.mediator=107, service.id=36, service.bundleid=55, service.scope=bundle, .org.apache.ari
es.spifly.provider.implclass=org.apache.logging.slf4j.SLF4JProvider, .org.apache.aries.spifly.provider.discovery.mode=SERVICELOADER_CAPABILITIES} [267]
22:06:33.287 BaseActivator.log: Unregistered: {org.slf4j.spi.SLF4JServiceProvider}={serviceloader.mediator=107, service.id=35, service.bundleid=44, service.scope=bundle, .org.apache.aries.
spifly.provider.implclass=org.slf4j.jul.JULServiceProvider, .org.apache.aries.spifly.provider.discovery.mode=SERVICELOADER_CAPABILITIES, type=jul} [267]
22:06:33.307 Runtime.logRuntimeExit: Runtime.exit() called with status: 0 [1]
java.lang.Throwable: Runtime.exit(0)
at java.base/java.lang.Shutdown.logRuntimeExit(Shutdown.java:179)
at java.base/java.lang.Shutdown.exit(Shutdown.java:160)
at java.base/java.lang.Runtime.exit(Runtime.java:188)
at java.base/java.lang.System.exit(System.java:1920)
at org.eclipse.equinox.launcher.Main.main(Main.java:1443)            
setup-db.sh
setup-ws.sh
setup.sh

Erick Benivan

unread,
Dec 30, 2025, 10:04:49 PM (yesterday) Dec 30
to iDempiere
hi,
you can type bash RUN_SyncDBDev.sh can look on documentation here
https://wiki.idempiere.org/en/Applying_additional_Migration_Scripts 

Kanat Mergenbayev

unread,
1:57 AM (21 hours ago) 1:57 AM
to iDempiere

I guess *.qualifier creates this error. 1:49:52.099-----------> Core.getKeyStore: Encryption with legacy key algorithm DES detected - it is recommended to migrate to a stronger algorithm [47]

11:49:52.284-----------> Activator.createHazelCastInstance: Starting hazelcast with configuration from file hazelcast.xml [47]

11:49:52.459-----------> CPSubsystem: [192.168.0.21]:5701 [adempiere.idempiere/localhost:5432] [5.3.7] CP Subsystem is not enabled. CP data structures will operate in UNSAFE mode! Please note that UNSAFE mode will not provide strong consistency guarantees. [47]

11:49:52.572-----------> Node: [192.168.0.21]:5701 [adempiere.idempiere/localhost:5432] [5.3.7] No join method is enabled! Starting standalone. [47]

11:49:52.684-----------> DB.isBuildOK: Build Version Error


The program assumes build version 12.0.0.qualifier, but database has build version 12.0.0.202512310603.

This is likely to cause hard to fix errors.

Please contact administrator. [47]

Excellent question — this goes to the core of how Eclipse / OSGi builds work, and it’s the key to understanding your situation.


Short answer

You did not set qualifier anywhere manually.
It is automatically injected by Eclipse / Tycho when you run iDempiere from source.


Where 12.0.0.qualifier actually comes from1️⃣ In iDempiere source code

Open any core plugin, for example:

org.idempiere.base/META-INF/MANIFEST.MF

You will see something like:

Bundle-Version: 12.0.0.qualifier

This is intentional.

  • qualifier means:

    “This bundle is built in a development workspace”

It is not a real version.


2️⃣ What Eclipse does at runtime

When you:

  • run iDempiere from Eclipse

  • or run a PDE launch

  • or use idempiere-dev-setup

Eclipse does not replace qualifier.

So the runtime version stays:

12.0.0.qualifier


3️⃣ When qualifier becomes a timestamp

qualifier is only replaced when you do a real build, for example:

  • Tycho / Maven build

  • Jenkins / CI build

  • Official iDempiere release

During that build:

12.0.0.qualifier ⬇ 12.0.0.202512310603

That timestamp becomes:

  • Bundle version

  • Product version

  • Stored in lastbuildinfo in DB


Why the DB has a timestamp but code has qualifier

Because:

  • idempiere-dev-setup can initialize a DB using a built artifact

  • But you are now running directly from source

So you ended up with:


Component
Version
Eclipse runtime
12.0.0.qualifier
Database
12.0.0.202512310603

🚫 iDempiere forbids this combination.


Where the DB version is written

In the database table:

SELECT * FROM lastbuildinfo;

Column:

buildinfo = 12.0.0.202512310603

This is written when:

  • DB is initialized from a built distribution

  • OR migration scripts are applied


Why iDempiere enforces this check

This code exists for a reason:

  • Running newer DB against older code

  • Or dev code against prod DB

  • Can silently corrupt metadata

So iDempiere stops hard instead.

This is good design.


Mental model (important)

Think of it like this:

🔵 qualifier

“I am a developer workspace”

🟢 timestamp version

“I am a built, released system”

You must never mix them.


Correct workflows✅ Development

  • Source code → *.qualifier

  • Fresh DB

  • Eclipse runtime

✅ Production

  • Built artifacts

  • Timestamp version

  • Matching DB


Final takeaway

You didn’t configure qualifier.

It is:

  • Defined in MANIFEST.MF

  • Preserved by Eclipse

  • Only replaced during a real build

среда, 31 декабря 2025 г. в 08:04:49 UTC+5, erickb...@gmail.com:

Kanat Mergenbayev

unread,
2:12 AM (21 hours ago) 2:12 AM
to iDempiere

I dropped and recreated the idempiere database and then followed these steps:

  1. Used idempiere-dev-setup to install iDempiere and configure the Eclipse development environment

  2. In Eclipse, used install.app to configure idempiere.properties

  3. Navigated to the idempiere directory and ran RUN_ImportIdempiereDev.sh

  4. Ran RUN_SyncDBDev.sh

After this, I’m encountering a build/version mismatch at startup.
Is this the correct workflow for initializing a fresh development database, or am I mixing installer/import steps that are not intended for Eclipse dev runtime?


среда, 31 декабря 2025 г. в 11:57:51 UTC+5, Kanat Mergenbayev:

Heng Sin Low

unread,
2:27 AM (21 hours ago) 2:27 AM
to idem...@googlegroups.com
if you are using idempiere-dev-setup, you can use the same tool to setup your database.

--
You received this message because you are subscribed to the Google Groups "iDempiere" group.
To unsubscribe from this group and stop receiving emails from it, send an email to idempiere+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/idempiere/8159ba80-e8e6-4cf8-a605-0e80276753e3n%40googlegroups.com.

Kanat Mergenbayev

unread,
3:41 AM (20 hours ago) 3:41 AM
to iDempiere
sign.database.build fixes database version error. But now it stuck on login.

среда, 31 декабря 2025 г. в 12:27:49 UTC+5, hengsin:

Kanat Mergenbayev

unread,
8:52 AM (14 hours ago) 8:52 AM
to iDempiere
https://groups.google.com/g/idempiere/c/dhVTpRmmKO0/m/pcK2LMRAAwAJ

среда, 31 декабря 2025 г. в 13:41:08 UTC+5, Kanat Mergenbayev:
Reply all
Reply to author
Forward
0 new messages