Apache OFBiz®

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:

OFBiz documentation

OFBiz License

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 : The directory structure and repositories have changed. For more information read the "Repository and directory structure" section.

System requirements

The only requirement to run OFBiz is to have the Java Development Kit (JDK) version 8 installed on your system (not just the JRE, but the full JDK) which you can download from the below link. Make sure of setting the $JAVA_HOME environment variable.

JDK download

Quick start

To quickly install and fire-up OFBiz, please follow the below instructions from the command line at the OFBiz top level directory (folder)

Prepare OFBiz:

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

Start OFBiz:

MS Windows: gradlew ofbiz

Unix-like OS: ./gradlew ofbiz

Note: Ignore the % progress indicator because this task does not end as long as OFBiz is running.

Visit OFBiz through your browser:

Order Back Office

Accounting Back Office

Administrator interface

You can log in with the user admin and password ofbiz.

Security

If you find a 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.

You can find more information about security in OFBiz at Keeping OFBiz secure


Build system syntax

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.

Operating System Syntax

The syntax for tasks differ slightly between windows and Unix-like systems

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

Types of tasks in Gradle

There are two types of tasks designed for OFBiz in Gradle:

Tips:

Example standard tasks

gradlew build

gradlew cleanAll loadAll testIntegration

Example OFBiz server tasks

gradlew "ofbiz --help"

gradlew "ofbizDebug --test"

gradlew "ofbizBackground --start --portoffset 10000"

gradlew "ofbiz --shutdown --portoffset 10000"

gradlew ofbiz (default is --start)

Example mixed tasks (standard and OFBiz server)

gradlew cleanAll loadAll "ofbiz --start --portoffset 10000"


Quick reference

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


Help tasks

List OFBiz server commands

List all available commands to control the OFBiz server

gradlew "ofbiz --help"

List build tasks

List all available tasks from the build system

gradlew tasks

List build projects

List all available projects in the build system

gradlew projects

Gradle build system help

Show usage and options for the Gradle build system

gradlew --help


Server command tasks

Start OFBiz

gradlew "ofbiz --start"

start is the default server task so this also works:

gradlew ofbiz

Shutdown OFBiz

gradlew "ofbiz --shutdown"

Get OFBiz status

gradlew "ofbiz --status"

Force OFBiz shutdown

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

Start OFBiz in remote debug mode

Starts OFBiz in remote debug mode and waits for debugger or IDEs to connect on port 5005

gradlew "ofbizDebug --start"

OR

gradlew ofbizDebug

Start OFBiz on a different port

Start OFBiz of the network port offsetted by the range provided in the argument to --portoffset

gradlew "ofbiz --start --portoffset 10000"

Start OFBiz in the background

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"


Data loading tasks

OFBiz contains the following data reader types:

Available options for the --load-data server command are the following:

Load specific OFBiz data

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"

Load all OFBiz data

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. Use with caution in production environments.

gradlew loadAll

OR

gradlew "ofbiz --load-data"

Load seed data

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 ext data

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 ext test data

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 entity file

Load data from an XML file holding entity data.

gradlew "ofbiz --load-data file=foo/bar/FileNameHere.xml"

create a new tenant

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:

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:

load data for a specific tenant

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:

gradlew loadTenant -PtenantId=mytenant

gradlew loadTenant -PtenantId=mytenant -PtenantReaders=seed,seed-initial,demo -PtenantComponent=base


Testing tasks

Execute all unit tests

gradlew test

Execute all integration tests

gradlew testIntegration

OR

gradlew 'ofbiz --test'

Execute integration tests with a different log level

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:

gradlew "ofbiz --test loglevel=fatal"

Execute an integration test case

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"

Execute an integration test case in debug mode with verbose log

listens on port 5005

gradlew "ofbizDebug --test component=entity --test loglevel=verbose"

Execute an integration test suite

gradlew "ofbiz --test component=entity --test suitename=entitytests"

Execute an integration test suite in debug mode

listens on port 5005

gradlew "ofbizDebug --test component=entity --test suitename=entitytests"


Miscellaneous tasks

Run all tests on a clean system

gradlew cleanAll loadAll testIntegration

Clean all generated artifacts

gradlew cleanAll

Refresh the generated artifacts

gradlew clean build

Create an admin user account

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

Compile Java using Xlint output

Xlint prints output of all warnings detected by the compiler

gradlew -PXlint build

Run OWASP tool to identify dependency vulnerabilities (CVEs)

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

Setup eclipse project for OFBiz

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


OFBiz plugin system

OFBiz provides an extension mechanism through plugins. Plugins are standard OFBiz components that reside in the plugins directory. Plugins can be added manually or fetched from a maven repository. The standard tasks for managing plugins are listed below.

Note: OFBiz plugin versions follow Semantic Versioning 2.0.0

Pull (download and install) a plugin automatically

Download a plugin with all its dependencies (plugins) and install them one-by-one starting with the dependencies and ending with the plugin itself.

gradlew pullPlugin -PdependencyId="org.apache.ofbiz.plugin:myplugin:0.1.0"

If the plugin resides in a custom maven repository (not jcenter or localhost) then you can use specify the repository using below command:

gradlew pullPlugin -PrepoUrl="http://www.example.com/custom-maven" -PdependencyId="org.apache.ofbiz.plugin:myplugin:0.1.0"

If you need username and password to access the custom repository:

gradlew pullPlugin -PrepoUrl="http://www.example.com/custom-maven" -PrepoUser=myuser -PrepoPassword=mypassword -PdependencyId="org.apache.ofbiz.plugin:myplugin:0.1.0"

Pull an official plugin from source control

Download an official plugin from source control (currently subversion) and place it in the plugins directory. In addition, this task also executes the "install" task if it is defined for the plugin being downloaded.

This task is mostly useful when working on the trunk branch as it pulls in the latest version of a plugin.

gradlew pullPluginSource -PpluginId=ecommerce

Note: This plugin will have its own .svn directory placed inside the plugin directory.

Pull all official plugins from source control

Download all officially supported plugins from source control (currently subversion) and place them inclusive of their ".svn" directory in /plugins. WARNING! This task deletes the /plugins directory and replaces it with the official plugins.

gradlew pullAllPluginsSource

This task makes it easy to download and develop officially supported plugins. It is mostly used by developers or individuals working on the trunk branch. We do not recommend using this task on releases of OFBiz, instead consider using the "pullPlugin" task to get the correct version of a plugin compatible with your release.

Note: All the plugins will share a .svn directory placed in the plugins directory.

Install a plugin

If you have a plugin called mycustomplugin and want to install it in OFBiz follow the below instructions:

gradlew installPlugin -PpluginId=myplugin

The above commands executes the task "install" in the plugin's build.gradle file if it exists

Uninstall a plugin

If you have an existing plugin called mycustomplugin and you wish to uninstall run the below command

gradlew uninstallPlugin -PpluginId=myplugin

The above command executes the task "uninstall" in the plugin's build.gradle file if it exists

Remove a plugin

Calls uninstallPlugin on an existing plugin and then delete it from the file-system

gradlew removePlugin -PpluginId=myplugin

Create a new plugin

Create a new plugin. The following project parameters are passed:

gradlew createPlugin -PpluginId=myplugin

gradlew createPlugin -PpluginId=myplugin -PpluginResourceName=MyPlugin -PwebappName=mypluginweb -PbasePermission=MYSECURITY

The above command creates a new plugin in /plugins/myplugin

Push a plugin to a repository

This task publishes an OFBiz plugin into a maven package and then uploads it to a maven repository. Currently, pushing is limited to localhost maven repository (work in progress). To push a plugin the following parameters are passed:

gradlew pushPlugin -PpluginId=myplugin

gradlew pushPlugin -PpluginId=mycompany -PpluginGroup=com.mycompany.ofbiz.plugin -PpluginVersion=1.2.3 -PpluginDescription="Introduce special functionality X"


Miscellaneous Documentation

Repository and directory structure

OFBiz is split into two repositories:

Furthermore, the hot-deploy directory is removed as the plugins directory works as a replacement for both "special-purpose" and "hot-deploy".

If you need to load the components in the plugins directory in a specific order place a component-load.xml file in the plugins directory listing the order.

To check out a plugin from source control use the pullPluginSource Gradle task. To check out all plugins from source control use the pullAllPluginsSource. Beware this deletes a previously existing plugins directory.

Setup an external database like MySQL, PostgreSQL, etc

To setup an external database instead of the default embedded Apache Derby, you will need to follow the following instructions:

  1. Find the JDBC driver suitable for your database using one of the following options:
  1. Modify the entityengine.xml file located in $OFBIZ_HOME/framework/entity/config to switch the default database to the one you selected. For more details you can read the relevant section in the technical setup guide

Setup gradle tab-completion on Unix-like systems:

To get tab completion (auto complete gradle commands by pressing tab) you can download the script from the below link and place it in the appropriate location for your system.

Gradle tab completion

For example, on debian based systems, you can use the following command:

sudo curl -L -s https://edub.me/gradle-completion-bash -o /etc/bash_completion.d/gradle-tab-completion.bash


Crypto notice

This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information.

The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.

The following provides more details on the included cryptographic software: