THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
The following steps can be used to configure IntelliJ IDEA to build and test Daffodil:
- If not already installed, install the
Scala
plugin from JetBrains to add SBT and Scala support. - With the Daffodil repository checked out, select
File > New > Project from Existing Sources...
and select the Daffodil repository directory. Note that symlinks seem to cause failures to import, so use a absolute physical path to the daffodil repository directory.
- We want to configure the project to use SBT for configuration and building, so select:
Import project from external model
and selectsbt
. - Set the following settings:
- Download Library sources: Checked
- Download sbt sources: Unchecked
- Use sbt shell for imports: Checked
- Use sbt shell for builds: Checked
- Allow overriding sbt version: Unchecked
- Global sbt settings > Maximum heap size: 6144 MB
- Download Library sources: Checked
- Click Finish.
- Exit IntelliJ and restart it, selecting the Daffodil project.
- An alert will display stating "sbt projects need to be imported". Select
Enable Auto-Import
. - After the sync is complete in the Build tab, ensure that the project builds:
Build > Build Project
- To add a configuration to run all JUnit tests, select:
Run > Edit Configurations > + (plus sign) > JUnit
and apply the following settings:- Name: All Daffodil Tests
- Test Kind: Pattern
- Pattern:
^(?!.*TestCLI.*).*$
- Search for tests: In whole project
- Name: All Daffodil Tests
- Run tests via:
Run > All Daffodil Tests
To setup to work with Daffodil/XML, you can start with the following:
- Go to
File > Settings > Editor > File Types
- In the
Recognized file types
box, scroll down toXML
, select it and under theRegistered patterns
box, click the + sign, and add*.dfdl.xsd
. Repeat for*.tdml
.
To be able to run CLI Tests, you either can try:
- IntelliJ Idea Ultimate ensuring the Working Directory is the project root. You can get a free license
- if you're an apache committer: https://www.jetbrains.com/community/opensource/#partner
- if you're a student/teacher: https://www.jetbrains.com/community/education/#students
- if you're part of an open source project: https://www.jetbrains.com/community/opensource/#support
- IntelliJ Idea Community as described in this comment (works for some, but not all).
The default formatting settings for Scala must be changed to match our code style too. You must explicitly check two options that are disabled by default (File→Settings, Editor Scala, Spaces tab):
- Import braces
- Around '@' in pattern bindings
7 Comments
Mike Beckerle
When I tried to setup a large project, IDEA started complaining about inotify handles or some such.
I had to follow the instructions here: https://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
Mike Beckerle
I discovered that having JAVA_OPTS with
increases the stack space needs substantially to the point where IDEA won't run the EDIFACT schema unit tests without enlarging the stack. It also slows things down significantly.
Mike Beckerle
Some of IDEA's scala settings are not consistent with our formatting standard.
I had to check File→Settings select Editor Scala. On the Spaces tab, check boxes for
Mike Beckerle
To be able to run the CLI tests within IDEA, I had to edit the configuration to make it look more ordinary, with tests in src/test instead of src/it.
It's a pain in the neck because you don't want to commit these changes.
These steps:
Outside of IDEA at the command line:
Now back in IDEA you can run a CLI test interactively. However, it is shelling out to an external executable, so you can't debug interactively.
Mike Beckerle
I have found IDEA is very sensitive to symlinks vs. regular paths. I find when creating a new project, if the path I give to the project has a symlink in it, the import often fails. If I give the absolute path without symlinks it works fine.
Mike Beckerle
Turns out some of the nice electric completion and such for IDEA happens due to this file I found in my ~/.idea/ directory: IDEA-xml-catalog.xml
Contains this. If daffodil libraries (esp the daffodil-lib library jar) are on classpath, as they will be for DFDL schema projects that use Daffodil, then this will allow IntelliJ IDEA to find the XML Schemas for DFDL file, and TDML files.
Note that this is getting the corresponding schemas from IntelliJ IDEA's classpath, which is not the same as any given project's classpath. E.g., if you are editing these XSD schema files, then the IDEA may not see and take up your changes. In that case you may need to use absolute file paths in these entries, and even then forcing it to re-read the files may require restarting IDEA.
Mike Beckerle
A further enhancement to the IntelliJ IDEA electric XSD, DFDL, TDML support:
If you order the xmlns declarations at the top-level element, so that the default namespace declaration appears first, then when IDEA suggests things for you, it will suggest them without the namespace prefix. Its suggestions use the order of xmlns bindings in the root element.
So if you use the preferred DFDL schema and TDML styles which use a default namespace, then setup DFDL schemas like this with the default namespace first.
And for TDML files: