加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

Apache OFBiz®

License Apache%202.0 blue Version trunk blue ofbizTrunkFramework badge measure?project=apache ofbiz framework&metric=alert status badge badge

If you are reading this file in AsciiDoc format you may want to see it at HTML or PDF format


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.

System requirements

The only requirements 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) 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

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).

Download the Gradle wrapper:

MS Windows: init-gradle-wrapper

Important
  • If you cross the error

"Powershell is not recognized as an internal or external command, operable program or batch file"

follow the advice there: https://s.apache.org/vdcv8. If you want more details see: https://s.apache.org/ac7no

  • If you run into problems check the the execution policy of PowerShell. See https://s.apache.org/urnju for details. By setting the execution policy to "unrestricted", you’ll be prompted to run the script once you run the init-gradle-wrapper command.

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

Prepare OFBiz:

Clean system and load the complete OFBiz data

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:

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

Note
In case of problems visit our Further reading section.

Security

  • 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.

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

  • 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

Types of tasks in Gradle

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.

Example standard tasks

gradlew build

gradlew cleanAll loadAll testIntegration

Example OFBiz server tasks

gradlew "ofbiz --help"

gradlew "ofbiz --test" --debug-jvm

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 ofbiz --debug-jvm

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"

Passing JVM runtime options to OFBiz

You can pass JVM runtime options by specifying the project property -PjvmArgs.

gradlew ofbiz -PjvmArgs="-Xms1024M -Xmx2048M" -Dsome.parameter=hello

If you do not specify jvmArgs, a default of -Xms128M -Xmx1024M is set.

Data loading tasks

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

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"

 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!

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.

gradlew loadAll OR gradlew "ofbiz --load-data"

Caution
Use with caution in production environments.

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:

  • 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 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:

  • tenantId (mandatory)

  • tenantReaders (optional)

  • tenantComponent (optional)

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:

  • always

  • verbose

  • timing

  • info

  • important

  • warning

  • error

  • fatal

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 "ofbiz --test component=entity --test loglevel=verbose" --debug-jvm

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 "ofbiz --test component=entity --test suitename=entitytests" --debug-jvm

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 without using Xlint output

By default Xlint prints output of all warnings detected by the compiler, if you want to silence them

gradlew -PXlint:none 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

Package and distribute OFBiz

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.

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

Pull all official plugins from source control

Download all officially supported plugins from source control (currently git) and place them 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.

Install a plugin

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

  • Extract the plugin if it is compressed

  • Place the extracted directory into /plugins

  • Run the below command

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:

  • pluginId: mandatory

  • pluginResourceName: optional, default is the Capitalized value of pluginId

  • webappName: optional, default is the value of pluginId

  • basePermission: optional, default is the UPPERCASE value of pluginId

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:

  • pluginId: mandatory

  • groupId: optional, defaults to org.apache.ofbiz.plugin

  • pluginVersion: optional, defaults to 0.1.0-SNAPSHOT

  • pluginDescription: optional, defaults to "Publication of OFBiz plugin ${pluginId}"

gradlew pushPlugin -PpluginId=myplugin

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

Miscellaneous Documentation

Further reading

Repository and directory structure

OFBiz is split into two repositories:

  • ofbiz-framework: Contains the core framework and main applications in the system like accounting, party, order, etc

  • ofbiz-plugins: Renamed from "special-purpose" and contains optional components that are officially supported by the community

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.

Running gradle tasks without an internet connection

OFBiz must run with an internet connection the first time it is prepared on the system because it needs to download all the required dependencies.

After preparing OFBiz the first time correctly, it is possible to run OFBiz without an internet connection by using the --offline command line switch which tells Gradle to fetch its dependencies from the cache.

If any dependencies are missing from the cache and you pass --offline switch then the build execution will fail.

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:

    • Search for the JDBC driver in jcenter and place it in build.gradle dependencies e.g. runtime 'mysql:mysql-connector-java:5.1.36'

      OR

    • Download the JDBC driver jar and place it in $OFBIZ_HOME/lib or the lib sub-directory of any component

  2. 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.

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:

  • Various classes in OFBiz, including DesCrypt, HashCrypt, and BlowFishCrypt use libraries from the Sun Java JDK API including java.security.* and javax.crypto.* (the JCE, Java Cryptography Extensions API)

  • Other classes such as HttpClient and various related ones use the JSSE (Java Secure Sockets Extension) API

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ========================================================================= This product bundles "Noto Sans" fonts, which are available under the "Apache License Version 2.0". For details, see framework/resources/fonts/NotoSans/. ========================================================================= This product bundles "timezones" files, which are available in the "Public Domain". For details, see themes/common/webapp/common-theme/js/plugins/date/timezones. ========================================================================= This product bundles "jQuery Input Mask plugin", which is available under the "MIT" license. For details, see themes/common-theme/webapp/common-theme/js/jquery/plugins/inputmask/jquery.inputmask*

简介

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. 展开 收起
Java
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化