Welcome to Apache OFBiz! A powerful top level Apache software project. OFBiz is an Enterprise Resource Planning (ERP) System written in Java and houses a large set of libraries, entities, services and features to run all aspects of your business.
For more details about OFBiz please visit the OFBiz Documentation page:
Note: If you want to use Eclipse, read the "Setup eclipse project for OFBiz" section to set it up.
Note: If you want to use an external database like MySQL or PostgreSQL, read the "Setup an external database" section to set it up.
Note: If you want to run OFBiz without an internet connection, read the "Running gradle tasks without an internet connection" section.
Note: The directory structure and repositories have changed. For more information read the "Repository and directory structure" section.
The only requirements to run OFBiz is
-
to have the Java Development Kit (JDK) version 17 installed on your system (not just the JRE, but the full JDK) that you can download from the below link. Make sure of setting the $JAVA_HOME environment variable.
JDK download. To know more about the JDK
Warning
|
On Windows don’t put OFBiz in a directory with space/s in the path. |
-
If on Windows, a Powershell version >= 7.1.3 installed that you can download from the below link.
Powershell
To quickly install and fire-up OFBiz, please follow the below instructions from the command line at the OFBiz top level directory (folder).
MS Windows: init-gradle-wrapper
Important
|
follow the advice there: https://s.apache.org/vdcv8. If you want more details see: https://s.apache.org/urnju
|
Note
|
If you wonder where are stored the PowerShell Executables, here are the answers: https://s.apache.org/w5dye |
Unix-like OS: ./gradle/init-gradle-wrapper.sh
Note: Depending on your Internet connection speed it might take a long time for this step to complete if you are using OFBiz for the first time as it needs to download all dependencies. So please be patient!
MS Windows: gradlew cleanAll loadAll
Unix-like OS: ./gradlew cleanAll loadAll
If you want to set and use Docker, here is the documentation
You can log in with the user admin and password ofbiz.
Note
|
In case of problems visit our Further reading section. |
-
If you find a pre-auth security issue, please report it to: security @ ofbiz.apache.org. Once proper mitigations to the security issues are complete the OFBiz team will disclose this information to the public mailing list.
-
If you find a post-auth security issue, please create a bug in our issue tracker (Jira) .
-
If you want to use AJP on a non localhost OFBiz instance, you need to set the value of allowedRequestAttributesPattern in framework/catalina/ofbiz-component.xml
You can find more information about security in OFBiz at Keeping OFBiz secure
Caution
|
In production never use the credentials contained in demo data. Not only the admin credentials, but all of them. Also we recommend to not use Windows Server in production because we are not supporting specific Windows related security issues. |
All build tasks are executed using the Gradle build system which is embedded in OFBiz. To execute build tasks go to OFBiz top-level directory (folder) and execute tasks from there.
The syntax for tasks differ slightly between windows and Unix-like systems
-
Windows:
gradlew <tasks-in-here>
-
Unix-like:
./gradlew <tasks-in-here>
For the rest of this document, we will use the windows syntax, if you are on a
Unix-like system, you need to add the ./
to gradlew
There are two types of tasks designed for OFBiz in Gradle:
-
Standard tasks: To execute general standard Gradle tasks
-
OFBiz server tasks: To execute OFBiz startup commands. These tasks start with one of the following words:
-
ofbiz : standard server commands
-
ofbizBackground ; server commands running in a background forked process
Tips:
-
OFBiz server commands require "quoting" the commands. For example:
gradlew "ofbiz --help"
-
Shortcuts to task names can be used by writing the first letter of every word in a task name. However, you cannot use the shortcut form for OFBiz server tasks. Example:
gradlew loadAdminUserLogin -PuserLoginId=myadmin
=gradlew lAUL -PuserLoginId=myadmin
-
Dependent tasks can be skipped with the -x switch. Example:
gradlew build -x test
does not run the tests within the build.
gradlew "ofbiz --help"
gradlew "ofbiz --test" --debug-jvm
gradlew "ofbizBackground --start --portoffset 10000"
gradlew "ofbiz --shutdown --portoffset 10000"
gradlew ofbiz
(default is --start)
You can use the below common list of tasks as a quick reference for controlling
the system. This document uses the windows task syntax, if you are on a
Unix-like system, you need to add the ./
to gradlew i.e. ./gradlew
List all available commands to control the OFBiz server
gradlew "ofbiz --help"
gradlew "ofbiz --start"
start is the default server task so this also works:
gradlew ofbiz
Terminate all running OFBiz server instances by calling the appropriate operating system kill command. Use this command to force OFBiz termination if the --shutdown command does not work. Usually this is needed when in the middle of data loading or testing in OFBiz.
Warning: Be careful in using this command as force termination might lead to inconsistent state / data
gradlew terminateOfbiz
Starts OFBiz in remote debug mode and waits for debugger or IDEs to connect on port 5005
gradlew ofbiz --debug-jvm
Start OFBiz in the background by forking it to a new process and redirecting the output to runtime/logs/console.log
gradlew "ofbizBackground --start"
OR
gradlew ofbizBackground
You can also offset the port, for example:
gradlew "ofbizBackground --start --portoffset 10000"
OFBiz contains the following data reader types:
-
seed: OFBiz and External Seed Data - to be maintained along with source and updated whenever a system deployment is updated
-
seed-initial: OFBiz and External Seed Data - to be maintained along with source like other seed data, but only loaded initially and not updated when a system is updated except manually reviewing each line
-
demo: OFBiz Only Demo Data
-
ext: External General Data (custom)
-
ext-test: External Test Data (custom)
-
ext-demo: External Demo Data (custom)
-
tenant: Data to load into the master tenants database "ofbiztenant". This data is required to identify where a tenant’s database is located. For more information you can review the relevant tenant documentation
Available options for the --load-data server command are the following:
-
readers=[name]: only load data from certain readers separated by comma. e.g. seed,seed-initial,ext
-
file=[path]: load a single file from location or several files separated by commas. e.g. /my/file/1,/my/file/2
-
dir=[path]: load all data files found in directory
-
component=[name]: only load data from a specific component. e.g. base
-
delegator=[name]: use the defined delegator. Default is "default". If the value passed is "all-tenants" then OFBiz will load the data for all defined tenants in the system.
-
group=[name]: override the entity group (org.apache.ofbiz). e.g. com.example.something
-
timeout=[millis]: timeout in milliseconds
-
create-pks: create primary keys
-
drop-pks: drop primary keys
-
create-constraints: create indexes and foreign keys after loading
-
drop-constraints: drop indexes and foreign keys before loading
-
create-fks: create dummy (placeholder) foreign keys
-
maintain-txs: maintain timestamps in data file
-
try-inserts: use mostly inserts
-
repair-columns: repair column sizes (default is true w/ drop-constraints)
-
continue-on-failure: By default OFBiz will fail and stop if it is unable to load any of the files it is attempting to load. By passing this property OFBiz will ignore failures and continue loading all files
you can choose which data readers to pass in the following syntax:
gradlew "ofbiz --load-data readers=<readers-here-comma-separated>"
Example:
gradlew "ofbiz --load-data readers=seed,seed-initial,ext,ext-demo"
Beware that copying this command in Microsoft Word will automatically transform the double dash in en dashes (Unicode 0x2013: –) Other cases not related to Word were also reported.So when this command does not work check that you are using dash!
Loads all data sets; meant for initial loading of generic OFBiz data. Can be applied for development, testing, demonstration, etc. purposes. Be aware that executing this task can result in your data being overwritten in your database of choice.
gradlew loadAll
OR gradlew "ofbiz --load-data"
Caution
|
Use with caution in production environments. |
Load ONLY the seed data (not seed-initial, demo, ext* or anything else); meant for use after an update of the code to reload the seed data as it is generally maintained along with the code and needs to be in sync for operation
gradlew "ofbiz --load-data readers=seed"
Load seed, seed-initial and ext data; meant for manual/generic testing, development, or going into production with a derived system based on stock OFBiz where the ext data basically replaces the demo data
gradlew "ofbiz --load-data readers=seed,seed-initial,ext"
Load seed, seed-initial, ext and ext-test data; meant for automated testing with a derived system based on stock OFBiz
gradlew "ofbiz --load-data readers=seed,seed-initial,ext,ext-test"
Load data from an XML file holding entity data.
gradlew "ofbiz --load-data file=foo/bar/FileNameHere.xml"
Create a new tenant in your environment, create the delegator, load initial data with admin-user and password (needs multitenant=Y in general.properties). The following project parameters are passed:
-
tenantId: mandatory
-
tenantName: optional, default is value of tenantId
-
domainName: optional, default is org.apache.ofbiz
-
tenantReaders: optional, default value is seed,seed-initial,demo
-
dbPlatform: optional, D(Derby), M(MySQL), O(Oracle), P(PostgreSQL) (default D)
-
dbIp: optional, ip address of the database
-
dbUser: optional, username of the database
-
dbPassword: optional, password of the database
gradlew createTenant -PtenantId=mytenant
gradlew createTenant -PtenantId=mytenant -PtenantName="My Name" -PdomainName=com.example -PtenantReaders=seed,seed-initial,ext -PdbPlatform=M -PdbIp=127.0.0.1 -PdbUser=mydbuser -PdbPassword=mydbpass
If run successfully, the system creates a new tenant having:
-
delegator: default#${tenandId} (e.g. default#mytenant)
-
admin user: ${tenantId}-admin (e.g. mytenant-admin)
-
admin user password: ofbiz
Load data for one specific tenant in a multitenant environment. Note that you must set multitenant=Y in general.properties and the following project parameters are passed:
-
tenantId (mandatory)
-
tenantReaders (optional)
-
tenantComponent (optional)
gradlew loadTenant -PtenantId=mytenant
gradlew loadTenant -PtenantId=mytenant -PtenantReaders=seed,seed-initial,demo -PtenantComponent=base
gradlew testIntegration
OR
gradlew 'ofbiz --test'
It is possible to start integration tests with a log level different from the default one. The log levels allowed are listed below from most verbose to least verbose:
-
always
-
verbose
-
timing
-
info
-
important
-
warning
-
error
-
fatal
gradlew "ofbiz --test loglevel=fatal"
Run a test case, in this example the component is "entity" and the case name is "entity-tests"
gradlew "ofbiz --test component=entity --test suitename=entitytests --test case=entity-query-tests"
Listens on port 5005
gradlew "ofbiz --test component=entity --test loglevel=verbose" --debug-jvm
gradlew "ofbiz --test component=entity --test suitename=entitytests"
Listens on port 5005
gradlew "ofbiz --test component=entity --test suitename=entitytests" --debug-jvm
Create an admin user with login name MyUserName and default password with value "ofbiz". Upon first login OFBiz will request changing the default password
gradlew loadAdminUserLogin -PuserLoginId=MyUserName
By default Xlint prints output of all warnings detected by the compiler, if you want to silence them
gradlew -PXlint:none build
The below command activates a gradle plugin (OWASP) and Identifies and reports known vulnerabilities (CVEs) in OFBiz library dependencies. The task takes time to complete, and once done, a report will be generated in $OFBIZ_HOME/build/reports/dependency-check-report.html
gradlew -PenableOwasp dependencyCheckAnalyze
Setting up OFBiz on eclipse is done by simply running the below command and then importing the project to eclipse. This command will generate the necessary .classpath and .project files for eclipse and it will also make the source code for external libraries available in eclipse (i.e. you can view source through Ctrl + Click)
The first time you run this command it will take a long time to execute because it will download source packages available for project dependencies.
gradlew eclipse
In order to deploy OFBiz on a target system and in particular in a production
environment without requiring the target system to download Gradle and OFBiz
dependencies from the internet, it is possible to generate an archive bundling
OFBiz with all the Jars it depends on as a tar
archive
gradlew distTar
or as a zip
archive.
gradlew distZip
Those archives are available in the build/distributions
directory. To run
OFBiz from those archive you must first unarchive them with tar xf
or unzip
and then from that directory you can run either bin/ofbiz
shell script or
bin/ofbiz.bat
batch script with the appropriate ofbiz options.