Using Eclipse for SavaPage Development
This is a guide for SavaPage Development Partners on how to install and configure Eclipse IDE for SavaPage development.
Status : under construction
Installation
Download latest stable version of Eclipse IDE for Java EE Developers.
cd ~/applications tar -zxvf eclipse-jee-2024-06-R-linux-gtk-x86_64.tar.gz
Marketplace
Install from Eclipse Marketplace:
- Checkstyle Plug-in
- Make Checkstyle active for every Java project project.
- Use built-in
Sun Checks - (Global)
coding convention for all Java projects.
- SpotBugs Eclipse Plugin (formerly known as FindBugs)
- Run automatically for every Java project.
- Jaspersoft Studio : not available anymore
- See this workaround
- Bash Editor
Configure
Show Hidden Files
In the package explorer, in the upper right corner of the view, there is a little icon with tool tip text “View Menu”. From that menu, select “Filters and Customization”. On the “Pre-set filters” tab, uncheck .* resources
.
Compiler compliance level
Select Window → Preferences → Java → Compiler
- JDK compliance → Compiler compliance level:
11
Installed JREs
Select Window → Preferences → Java → Installed JREs
- Check that OpenJDK 11 or higher is selected.
Important | Make sure the openjdk source package is installed, so its Javadoc is available in Eclipse. |
---|
# if openjdk-11 is installed, then ... sudo apt install openjdk-11-source
JPA Validation
To prevent “Duplicate generator defined in this persistence unit” messages:
Select Window → Preferences → Java Persistence →JPA → Errors/Warnings
Under “Queries and generators” mark “Duplicate generator defined” as Ignore
.
Java Code Style
Formatter
Select Window → Preferences → Java → Code Style → Formatter
- Press the 'Import…' button.
- Select
savapage-make/eclipse/CodeFormatterProfileJava.xml
.
Code Templates
Select Window → Preferences → Java → Code Style → Code Templates → Comments → Types
- Press the 'Edit' button.
- Change your name in the generated comment from
@author ${user}
to@author Your Name
.
JavaScript Code Style
Formatter
Select Window → Preferences. Select JavaScript, or Web → HTML Files → Client-side JavaScript. Select Code Style → Formatter
- Press the 'Import…' button.
- Select
savapage-make/eclipse/CodeFormatterProfileJavaScript.xml
.
Editors
Text
Select Window → Preferences → General → Editors → Text Editors
Check the following items:
- Displayed tab width:
4
- Insert spaces for tabs
- Show print margin
- Print margin column:
80
- Show line numbers
- Show whitespace characters
- Configure visibility
- show spaces as dots
- do not show Carriage Return and Line Feed
XML
Select Window → Preferences → XML → XML Files → Editor
- Select: indent using spaces
- Indentation size: 4
- Note: when Indentation size cannot be set (known Eclipse bug) open with a text editor this file in your workspace folder:
.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.xml.core.prefs
and change/addindentationSize=4
- Unselect : Format comments
Java
Select Window → Preferences → Java → Editor → Save Actions
Not applicable in Eclipse 2019-03 (4.11.0) ?
- Select checkboxes and press “Formatter” button.
- On “Code Organizing” tab check “Remove trailing whitespace” and “Correct indentation” .
Eclipse 2020-06
- [x] Additional actions
CSS
Select Window → Preferences → Web → CSS Files → Editor
- Line width: 72
- Enable “Insert line break between properties”
- Enable “Insert whitespace between selectors”
- Enable “Disable wrapping in sty;e attribute of HTML”
- Select “Indent using tabs”
- Capitalization style: all “Lowercase”
HTML
Select Window → Preferences → Web → HTML Files → Editor
- Line width: 72
- Disable “Split multiple attributes each on a new line”
- Disable “Align final bracket in multi-line elements tags”
- Disable “Clear all blank lines”
- Select “Indent using tabs”
- Remove Inline Elements like `a`, `li`, `td`, `th`, `br`, `input`, `label`, `select` …
- Tag names: Lowercase
- Attribute names: Lowercase
Maven
Maven is integrated into Eclipse, but the central repository index needs to be rebuild, so we can select dependencies.
Select Window → Show View → Other
- Type “Maven” in filter, select “Maven Repositories” and press “Open”.
- In the “Maven” tab Expand “Global Repositories”.
- Right-click on “central” and select “Rebuild Index”.
Also set up index to update on Eclipse start-up.
- Select Window → Preferences → Maven
- Check “Download repository index updates on startup”.
Projects
Prerequisite | All relevant repositories are cloned into ~/savapage/repos/ as explained in the “Getting started” section of savapage-make/README.md . |
Important | To contribute code, fork/clone the target SavaPage repositories. Edit/commit in develop branch, and create Merge Requests to push changes upstream. |
savapage-make
Create savapage-make/.project
file …
- savapage-make/.project
<?xml version="1.0" encoding="UTF-8"?> <projectDescription> <name>savapage-make</name> <comment/> <projects/> <buildSpec/> <natures/> </projectDescription>
… and import this project via “Import → General → Existing Projects” into Workspace.
thirdparty
Download/install thirdparty files in addition to SavaPage.
cd ~/savapage wget https://www.savapage.org/download/development/thirdparty-savapage-fonts.tar.gz -O - | tar -xz
Maven projects
Add each Maven project with: File → Import → Maven → Existing Maven Projects.
For each project, select the project in the Project Explorer and select the project properties.
- → Checkstyle : enable “Checkstyle active for this project”.
- “Simple - use the following check configuration for all files:
Sun Checks -(Global)
- → SpotBugs : enable “Run automatically”.
savapage-core
Select the savapage-core project, right-click and select from main menu: Run As → Run Configurations… and Right-click on “Java Application”.
Select “New Configuration” and enter the following on tab “Main”:
Name | AppDb |
Main class | org.savapage.core.cli.AppDb |
On tab “Arguments” enter the following “Program Arguments”:
${string_prompt}
On tab “Arguments” enter the following “VM arguments”:
-Dserver.home=${project_loc}/../savapage-server/server.home -Dlog4j.configuration=file://${project_loc}/../savapage-server/server.home/lib/log4j.properties
Select “New Configuration” and enter the following on tab “Main”:
Name | App |
Main class | org.savapage.core.cli.server.App |
On tab “Arguments” enter the following “Program Arguments”:
${string_prompt}
On tab “Arguments” enter the following “VM arguments”:
-Dserver.home=${project_loc}/../savapage-server/server.home -Dlog4j.configuration=file://${project_loc}/../savapage-server/server.home/lib/log4j.properties
Fonts
Embed fonts:
cd ~/savapage/repos/savapage-core cd src/main/java/org/savapage/core/fonts/ mkdir truetype # copy font directories from thirdparty cp -r ~/savapage/thirdparty-savapage/fonts/savapage/0.9.7/* truetype/
Java Build Path
- Open the
savapage-core
project properties - Select the “Java Build Path → Source” →
savapage-core/src/main/java
source folder.- Make sure
Included: (All)
andExcluded: (None)
is selected. In this way XML and PNG and .properties files used in the Jasper Reports will be present in theOutput folder
, as needed for testing in the Eclipse environment.
- Select the “Java Build Path → Source” →
savapage-core/src/main/resources
source folder.- Make sure
Included: (All)
andExcluded: (None)
is selected. In this way the HibernateMETA-INF/persistence.xml
files will be present in theOutput folder
, as needed for testing in the Eclipse environment.
Beware | Java Build Path settings might be (bug?) overwritten when performing a “Maven → Update project” action. |
Note | Also see savapage-server build path problems. |
savapage-server
- Copy
savapage-make/eclipse/server.home.template
tosavapage-server/server.home
. - Follow the instructions in the
savapage-make/eclipse/server.home.template.md
file.
Select the savapage-server project, right-click and select from main menu: Run As → Run Configurations…
Right-click on “Java Application”, select “New Configuration” and enter the following on tab “Main”:
Name | WebServer |
Main class | org.savapage.server.WebServer |
On tab “Arguments” enter the following “VM arguments”:
-Dserver.home=${project_loc}/server.home -Dclient.home=${project_loc}/client.home -Dwicket.configuration=development -Dlog4j.configuration=file://${project_loc}/server.home/lib/log4j.properties -Dcom.sun.management.config.file=${project_loc}/server.home/jmxremote.properties -Djava.net.preferIPv4Stack=true -Djava.io.tmpdir=${project_loc}/server.home/tmp
Java-11 | As explained in java –help-extra add –illegal-access=debug as first line to “VM arguments”. This will write a stack-trace to stdout so “Illegal reflective access warnings” can be pinpointed. Add –add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED as second line. |
Note | Use -Dwicket.configuration=deployment if you want to run in deployment mode. |
Java Build Path
- Open the “savapage-server” project properties
- Select the “Java Build Path”
IMPORTANT
- To test the
savapage-ext-*
projects, theirtarget/classes
folders must be added (“Add Class Folder…”) to the “Java Build Path → Libraries” of the `savapage-server` project. - To test the
savapage-i18n-*
projects, theirtarget/classes
folders must be added (“Add Class Folder…”) to the “Java Build Path → Libraries” of thesavapage-server
project.
IMPORTANT :
- Select the “Java Build Path → Source” →
savapage-server/src/main/java
source folder. - Make sure
Included: (All)
andExcluded: (None)
is selected. In this way the Wicket*.html
files will be present in theOutput folder
, as needed for testing in the Eclipse environment.- As an alternative you can also add
**/*.html
to theIncluded
section (where**/*.java
most probably is already present) - Beware: this setting might be (when?) overwritten when performing a “Maven → Update project” action.
Note | Also see build savapage-core path problems. |
Create directory savapage-server/client.home/
and copy SAVAPAGE.ppd
to it.
log4j
Copy content from savapage-make/setup-template/savapage/server/lib/log4j.properties
to savapage-server/server.home/lib/log4j.properties
and add/replace:
- server.home/lib/log4j.properties
# ... ### log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m [%t]%n log4j.appender.stdout.encoding=UTF8 # ... log4j.rootLogger=ERROR, file, stdout # ... # end-of-file
server.properties
Copy content from: savapage-make/setup-template/savapage/server/server.properties
to savapage-server/server.home/server.properties
, and:
- Modify the IP Port numbers (http, https, raw print)
- Optionally change other values.
- server.home/server.properties
server.port=8080 server.ssl.port=8443 server.print.port.raw=9101
savapage-client
Create directory savapage-client/client.home/
with the following files:
client.home/log4j.properties
- see snippet below
client.home/app/config/client.properties
- Copy from
savapage-make/setup-template/savapage/client/app/config/client.properties
and editserver-host
,server-port
and optionally other values.
- savapage-client/client.home/log4j.properties
### direct log messages to stdout ### log4j.appender.Stdout=org.apache.log4j.ConsoleAppender log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout log4j.appender.Stdout.layout.conversionPattern=%d{ISO8601} %-5p %c{1}:%L - %m [%t]\n ### direct messages to file ### log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.File=${app.home}/logs/client.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m [%t]%n log4j.appender.file.encoding=UTF8 ### log4j.rootLogger=ERROR, Stdout, file ### log4j.logger.org.savapage=WARN #log4j.logger.org.eclipse.jetty=DEBUG #log4j.logger.org.cometd=DEBUG # end-of-file
Select the savapage-client project, right-click and select from main menu: Run As → Run Configurations…
Right-click on “Java Application”, select “New Configuration” and enter the following on tab “Main”:
Name | ClientApp |
Main class | org.savapage.client.ClientApp |
On tab “Arguments” enter the following “Program Arguments”:
${string_prompt}
On tab “Arguments” enter the following “VM arguments”:
-Dapp.home=${project_loc}/client.home -Dapp.name=savapage-client -Dlog4j.configuration=file://${project_loc}/client.home/log4j.properties
savapage-util
Select the savapage-util project, right-click and select from main menu: Run As → Run Configurations…
Right-click on “Java Application”, select “New Configuration” and enter the following on tab “Main”:
Name | AppUtil |
Main class | org.savapage.util.App |
On tab “Arguments” enter the following “Program Arguments”:
${string_prompt}
On tab “Arguments” enter the following “VM arguments”:
-Dserver.home=${project_loc}/../savapage-server/server.home -Dlog4j.configuration=file://${project_loc}/../savapage-server/server.home/lib/log4j.properties
Running and Debugging
WebServer | Select “savapage-server” from Project Explorer and press F11 |
ClientApp | Select “savapage-client” from Project Explorer and press F11 |
App | Select “savapage-core” from Project Explorer → Run Configurations → Java Application → App → Run |
AppDb | Select “savapage-core” from Project Explorer → Run Configurations → Java Application → AppDb → Run |
Database Tooling
Squirrel
Download/install from http://www.squirrelsql.org/
- Select ALL optional plug-ins.
Configure Drivers
Open the “Drivers” view and configure each driver used.
Apache Derby :
- Select “Apache Derby Embedded”, right-click and select “Modify driver…”
- Select “Extra Class Path” tab and Add the .jar file from the
.m2
directory that corresponds with thederby.version
in thesavapage-core/pom.xml
file. For example:~/.m2/repository/org/apache/derby/derby/10.14.2.0/derby10.14.2.0.jar
PostgreSQL :
- Select “PostgreSQL”, right-click and select “Modify driver…”
- Select “Extra Class Path” tab and Add the .jar file from the
.m2
directory that corresponds with thederby.version
in thesavapage-core/pom.xml
file. For example:~/.m2/repository/org/postgresql/postgresql/42.2.14/postgresql-42.2.14.jar
Add Databases
Open the “Aliases” View and “Create a New Alias” for your databases. For example:
Name | Driver | URL | User Name | Password | Auto Logon |
---|---|---|---|---|---|
savapage-dev-derby | Apache Derby Embedded | jdbc:derby:[absolute-path-to]/savapage-server/server.home/data/internal/Derby | Y | ||
savapage-dev-postgres | PostgreSQL | jdbc:postgresql://localhost/your-db-name | user | password | Y |
https://www.savapage.org/download/design/savapage-database-schema-1.10.pdf