Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
tutorial:dev:creating_a_development_environment [2019/07/23 15:13] kotynekv [Select IDE for frontend environment] fix link |
tutorial:dev:creating_a_development_environment [2024/01/09 08:25] koulaj |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Creating a development environment ====== | ====== Creating a development environment ====== | ||
- | This text is intended as a tutorial for CzechIdM developers with the goal to set up IDE, build CzechIdM in it and run the system. If you prefer quick glance at the code or need to start quickly, you can use [[tutorial: | + | This text is intended as a tutorial for CzechIdM developers with the goal to set up IDE, build CzechIdM in it and run the system. If you prefer quick glance at the code or need to start quickly, you can use [[.: |
====== 1. Install Java and Maven ====== | ====== 1. Install Java and Maven ====== | ||
Line 7: | Line 7: | ||
First install JDK and Maven: | First install JDK and Maven: | ||
- | Download Java 1.8 Oracle JDK (or OpenJDK), minor version **at least 101** (it's necessary due to the certificate of Nexus repository, which uses Let's encrypt and its support was added in version 101). The guide was tested | + | Download |
Install Maven from your system packages, at least version 3.1 is required. | Install Maven from your system packages, at least version 3.1 is required. | ||
+ | |||
<code bash> | <code bash> | ||
yum install maven | yum install maven | ||
mvn -v | mvn -v | ||
+ | |||
</ | </ | ||
Note: If you installed Java separately from your system libraries, you should set the correct Java home for Maven in the file " | Note: If you installed Java separately from your system libraries, you should set the correct Java home for Maven in the file " | ||
< | < | ||
+ | |||
export JAVA_HOME=/ | export JAVA_HOME=/ | ||
+ | |||
</ | </ | ||
+ | |||
This way Maven will always use this JDK. | This way Maven will always use this JDK. | ||
Line 27: | Line 32: | ||
<code bash> | <code bash> | ||
git clone https:// | git clone https:// | ||
+ | |||
</ | </ | ||
- | Check branch: | + | Check branch: |
<code bash> | <code bash> | ||
git branch | git branch | ||
+ | |||
</ | </ | ||
Line 39: | Line 46: | ||
<code bash> | <code bash> | ||
git checkout -b develop origin/ | git checkout -b develop origin/ | ||
+ | |||
</ | </ | ||
Line 45: | Line 53: | ||
<code bash> | <code bash> | ||
git checkout -b personal/ | git checkout -b personal/ | ||
+ | |||
</ | </ | ||
Line 54: | Line 63: | ||
Install necessary packages: | Install necessary packages: | ||
+ | |||
<code bash> | <code bash> | ||
yum install postgresql postgresql-server postgresql-init | yum install postgresql postgresql-server postgresql-init | ||
+ | |||
</ | </ | ||
Fedora 25 packages: | Fedora 25 packages: | ||
+ | |||
<code bash> | <code bash> | ||
dnf install postgresql-server postgresql-contrib | dnf install postgresql-server postgresql-contrib | ||
+ | |||
+ | </ | ||
+ | |||
+ | Ubuntu 22.04 LTS packages: | ||
+ | |||
+ | <code bash> | ||
+ | apt install postgresql postgresql-contrib | ||
+ | |||
</ | </ | ||
First run of the service: | First run of the service: | ||
+ | |||
<code bash> | <code bash> | ||
systemctl start postgresql.service | systemctl start postgresql.service | ||
+ | |||
</ | </ | ||
- | If the following error occurs: "Job for postgresql.service failed. See ' | + | If the following error occurs: "Job for postgresql.service failed. See ' |
- | Try initializing the PostgreSQL first and start the database again: | + | |
<code bash> | <code bash> | ||
postgresql-setup --initdb --unit postgresql | postgresql-setup --initdb --unit postgresql | ||
+ | |||
</ | </ | ||
Set automatic start of the service when starting OS: | Set automatic start of the service when starting OS: | ||
+ | |||
<code bash> | <code bash> | ||
systemctl enable postgresql.service | systemctl enable postgresql.service | ||
+ | |||
</ | </ | ||
Set the configuration file for the database to accept login and password (change METHOD from ident to md5) | Set the configuration file for the database to accept login and password (change METHOD from ident to md5) | ||
+ | |||
< | < | ||
vim / | vim / | ||
+ | |||
+ | in Ubuntu it is: | ||
+ | vim / | ||
+ | |||
+ | in Windows it is: | ||
+ | < | ||
# TYPE DATABASE | # TYPE DATABASE | ||
Line 92: | Line 123: | ||
# IPv6 local connections: | # IPv6 local connections: | ||
host | host | ||
+ | |||
</ | </ | ||
Restart the service to load the changes: | Restart the service to load the changes: | ||
+ | |||
< | < | ||
systemctl restart postgresql.service | systemctl restart postgresql.service | ||
+ | |||
</ | </ | ||
- | Create the database: | + | Create the database |
- | (Make sure you have installed and allowed en_US locale in your OS) | + | |
+ | * Version 10 - bcv\_idm\_10 | ||
+ | * Below version 10 - bcv\_idm\_storage | ||
+ | * (Make sure you have installed and allowed en_US locale in your OS) | ||
< | < | ||
su postgres -c psql postgres | su postgres -c psql postgres | ||
CREATE USER idmadmin PASSWORD ' | CREATE USER idmadmin PASSWORD ' | ||
- | CREATE DATABASE "bcv_idm_storage" WITH OWNER idmadmin ENCODING ' | + | CREATE DATABASE "bcv_idm_10" WITH OWNER idmadmin ENCODING ' |
</ | </ | ||
Line 112: | Line 150: | ||
The tutorial is different for each IDE. Select one and continue with a certain tutorial below: | The tutorial is different for each IDE. Select one and continue with a certain tutorial below: | ||
- | * [[devel: | + | * [[:devel: |
- | * [[devel: | + | * [[:devel: |
In the IDE start the Tomcat server with CzechIdM deployed. | In the IDE start the Tomcat server with CzechIdM deployed. | ||
Line 119: | Line 157: | ||
In browser access [[http:// | In browser access [[http:// | ||
- | > CzechIdM API is running | + | > CzechIdM API is running |
- | > | + | |
- | > If you can see this message, API is running | + | |
====== 5. Frontend development environment ====== | ====== 5. Frontend development environment ====== | ||
- | <note important> | + | <note important> |
- | In frontent project folder: | + | ===== Select IDE for frontend environment ===== |
- | ===== Install Node.js ===== | + | You can use any text editor or JavaScript IDE. We recommend to use ATOM |
- | Node.js version 4.x.x or higher is required (npm version 3.6 or higher is required). Download and install Node.js by your OS. | + | * See [[: |
- | < | + | |
- | For linux (fedora): | + | ====== 6. Run backend and frontend together ====== |
- | <code bash> | + | Assume running backend from the previous steps. |
- | dnf install nodejs | + | |
- | </ | + | |
- | Check nodejs version: | + | In the project root folder: |
- | <code bash> | + | Start frontend |
- | node -v | + | |
- | </ | + | |
- | + | ||
- | Check npm version: | + | |
<code bash> | <code bash> | ||
- | npm -v | + | cd CzechIdM/ |
+ | gulp | ||
</ | </ | ||
- | For update nodejs from 0.x versions: | + | A new browser window or tab will open with [[https:// |
- | * [[https:// | + | The frontend is fully started after you see in following line in log: |
- | * [[http:// | + | |
- | + | ||
- | Install gulp as global | + | |
- | + | ||
- | Gulp version 3.9.0 is required. | + | |
<code bash> | <code bash> | ||
- | npm install gulp@3.9.0 -g | + | [BS] 1 file changed (app.js) |
- | </ | + | |
- | Check gulp version: | ||
- | |||
- | <code bash> | ||
- | gulp -v | ||
</ | </ | ||
- | ===== Install | + | After the application |
- | First go to directory | + | |
+ | | ||
- | <code bash> | + | <note tip>If the app shows error with permission, log out</note> <note tip>To use CzechIdM in more windows or tabs for development purposes go to [[http:// |
- | cd czechidm-app | + | |
- | </code> | + | |
- | Run script modules-link defined in package.json. This script will create directory node_modules in parent directory and create symlink on him in czechidm-app. This prevents the problem with multiple copies of React (https:// | + | Congratulations! Your CzechIdM development environment |
- | <note important> | + | ====== Common development errors & tips ====== |
- | <code bash> | + | ===== Tomcat server fails to start ===== |
- | npm run modules-link | + | |
- | </ | + | |
- | <code bash> | + | If Tomcat server fails to start, try following: |
- | npm run czechidm-modules-link | + | |
- | </ | + | |
- | Install basic dependencies | + | * Increase the timeout |
+ | * Check that PostgreSQL server is running. | ||
<code bash> | <code bash> | ||
- | npm install | + | systemctl status postgresql.service |
- | </ | + | |
- | Install the dependencies for core module | ||
- | |||
- | Now we need to install mandatory core module. Go to core directory. You can use symlink in czechidm-modules. | ||
- | |||
- | <code bash> | ||
- | cd czechidm-modules/ | ||
</ | </ | ||
- | Install NPM dependencies. Most of dependency are installed within czechidm-core module. It is important for prevent problem with multiple copies of React. In this module is React present only in peer dependency. Peer dependency warnings are OK. | + | * Check that PostgreSQL database exists and the user can connect: Use the credentials filled in '' |
+ | < | ||
- | <code bash> | + | spring.datasource.url=jdbc: |
- | npm install | + | spring.datasource.username=idmadmin |
- | </ | + | spring.datasource.password=idmadmin |
- | Go to app module. | ||
- | |||
- | <code bash> | ||
- | cd ../../ | ||
</ | </ | ||
- | ===== Install | + | use the following command |
- | + | ||
- | We can install other application modules. We will install optional example module czechidm-example. | + | |
- | + | ||
- | All application modules are in czechidm-modules directory (in czechidm-app). Go to him and create symlink on example module. | + | |
<code bash> | <code bash> | ||
- | cd czechidm-modules | + | psql -h 127.0.0.1 -U idmadmin bcv_idm_storage |
- | ln -s ../../czechidm-example | + | |
- | </ | + | |
- | <note important> | ||
- | <code bash> | ||
- | mklink /D d: | ||
</ | </ | ||
- | </ | ||
- | Go to the example module. You can use symlink | + | * Check that you can read from the tables of the database. As in the previous point, connect |
+ | * Check the error message | ||
- | <code bash> | + | ==== Common error messages ==== |
- | cd czechidm-example | + | |
- | </ | + | |
- | Install | + | '' |
- | <code bash> | + | '' |
- | npm install | + | < |
- | </code> | + | |
- | Go to app module. | + | Offenders: |
+ | -> ... idm-core-impl-7.7.0-SNAPSHOT.jar!/ | ||
+ | -> ... idm-core-impl-7.7.0-SNAPSHOT.jar!/ | ||
- | <code bash> | ||
- | cd ../../ | ||
</ | </ | ||
- | ===== Install | + | Just increase |
- | If you are developing a custom module (for example named as " | + | === Could not create Vfs.Dir from url === |
- | | + | **This isn't error just warning**. You may don't interest about this warning. Warning |
- | | + | |
- | | + | |
- | First, we create the symlink to the " | + | < |
+ | 2019-07-18 10:01: | ||
- | <code bash> | + | org.reflections.ReflectionsException: |
- | cd projects/CzechIdM/Realization/frontend/czechidm-app/ | + | either use fromURL(final URL url, final List<UrlType> urlTypes) or use the static setDefaultURLTypes(final List< |
- | ln -s ../../../../../ | + | |
- | </code> | + | |
- | Then we create a symlink from the external module to the product " | ||
- | |||
- | <code bash> | ||
- | cd ../ | ||
- | ln -s ../ | ||
</ | </ | ||
- | ===== Make all modules together | + | ===== Frontend build fails ===== |
- | After when we have installed all required modules, we have to copy them together. Its means create symlinks from czechidm-modules to app node_modules. | + | ==== Out of memory ==== |
- | <code bash> | + | If your gulp build fails with the following error: |
- | cd ../ | + | |
- | gulp makeModules | + | |
- | </ | + | |
- | ===== Test ===== | + | < |
+ | [INFO] [18:43:00] Starting ' | ||
+ | [INFO] [18:45:30] Finished ' | ||
+ | [INFO] [18:45:30] Finished ' | ||
+ | [INFO] | ||
+ | [INFO] <--- Last few GCs ---> | ||
+ | [INFO] | ||
+ | [INFO] 192087 ms: Scavenge 1282.6 (1434.8) -> 1282.1 (1434.8) MB, 3.8 / 0 ms (+ 3.8 ms in 9 steps since last GC) [allocation failure]. | ||
+ | [INFO] 192095 ms: Scavenge 1282.6 (1434.8) -> 1282.2 (1434.8) MB, 3.6 / 0 ms (+ 3.3 ms in 8 steps since last GC) [allocation failure]. | ||
+ | [INFO] 192102 ms: Scavenge 1282.6 (1434.8) -> 1282.1 (1434.8) MB, 3.7 / 0 ms (+ 2.9 ms in 7 steps since last GC) [allocation failure]. | ||
+ | [INFO] | ||
+ | [INFO] | ||
+ | [INFO] <--- JS stacktrace ---> | ||
+ | [INFO] Cannot get stack trace in GC. | ||
+ | [ERROR] FATAL ERROR: Scavenger: semi-space copy | ||
+ | [ERROR] Allocation failed - process out of memory | ||
+ | [ERROR] 1: node:: | ||
- | <code bash> | ||
- | gulp test | ||
</ | </ | ||
- | ===== Select IDE for frontend environment ===== | + | Try following: |
- | You can use any text editor or JavaScript IDE. We recommend | + | * Go to '' |
- | * See [[devel:documentation: | + | * If you build BE+FE of a project together, check the '' |
+ | < | ||
- | ====== | + | < |
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
- | Assume running backend from the previous steps. | ||
- | |||
- | In the project root folder: | ||
- | |||
- | Start frontend | ||
- | |||
- | <code bash> | ||
- | cd CzechIdM/ | ||
- | gulp | ||
</ | </ | ||
- | A new browser window or tab will open with [[https:// | + | * try adding '' |
- | The frontend | + | < |
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
- | <code bash> | ||
- | [BS] 1 file changed (app.js) | ||
</ | </ | ||
- | After the application is running, log in: | + | ==== Wrong layout and NPM version ==== |
- | * username: admin | + | |
- | * password: admin | + | |
- | <note tip>If the app shows error with permission, log out</ | + | If your frontend looks like this: [[https://redmine.czechidm.com/ |
- | <note tip>To use CzechIdM in more windows or tabs for development purposes go to [[http://localhost:3001/]] to **BrowserSync** administration and then go to **SyncOptions** and disable everything except **CodeSync**</ | + | |
- | Congratulations! Your CzechIdM development environment | + | * there is package-lock.json file in the frontend app module and it looks like this: [[https://github.com/ |
- | + | * NPM version which you use when building frontend (or FE+BE) is at least 6. | |
- | + | ||
- | ====== Common development errors & tips ====== | + | |
- | + | ||
- | ===== Tomcat server fails to start ===== | + | |
- | + | ||
- | If Tomcat server fails to start, try following: | + | |
- | * Increase the timeout for Tomcat server Start (see [[devel:dev: | + | |
- | * Check that PostgreSQL server is running. | + | |
- | <code bash> | + | |
- | systemctl status postgresql.service | + | |
- | </code> | + | |
- | * Check that PostgreSQL database exists and the user can connect: Use the credentials filled in '' | + | |
< | < | ||
- | spring.datasource.url=jdbc: | ||
- | spring.datasource.username=idmadmin | ||
- | spring.datasource.password=idmadmin | ||
- | </ | ||
- | use the following command and type the password when asked for it. | ||
- | <code bash> | ||
- | psql -h 127.0.0.1 -U idmadmin bcv_idm_storage | ||
- | </ | ||
- | * Check that you can read from the tables of the database. As in the previous point, connect to the PostgreSQL database and try to select data from any of the IdM tables. If you have insufficient access rights, check the owner and grants for the schema " | ||
- | * Check the error message in the server output console. | ||
- | ==== Common error messages ==== | + | npm -v |
+ | 6.4.1 | ||
- | '' | ||
- | |||
- | '' | ||
- | < | ||
- | Offenders: | ||
- | -> ... idm-core-impl-7.7.0-SNAPSHOT.jar!/ | ||
- | -> ... idm-core-impl-7.7.0-SNAPSHOT.jar!/ | ||
</ | </ | ||
- | Just increase the version in the name of one of the scripts, clean & build the project again. | ||
- | === Could not create Vfs.Dir from url === | ||
- | **This isn't error just warning**. You may don't interest about this warning. Warning is only when you start local development environment and you configuration for ic connectors path isn't correctly setup. Dont worry about this warning. | ||
- | |||
- | < | ||
- | 2019-07-18 10: | ||
- | |||
- | org.reflections.ReflectionsException: | ||
- | either use fromURL(final URL url, final List< | ||
- | </ |