Replies: 1 comment 1 reply
-
|
Love the idea. Will be interesting to see what sort of packages get shared publicly. Discoverability will be important for adoption. The suggested dependencies sections seem really verbose. Perhaps there's an opportunity to use the "dependencies": {
"com.vendor.framework:fwname.pl": "9.1.0",
"com.vendor2.framework2:fwname2.zip": "7.4.1",
"com.progress.opendge:net.apl": "12.8.9",
"com.progress.opendge:core.apl": "12.8.9",
"cefsharp:cefsharp.zip": "124.3.80",
}
I haven't used it much, so I'm not super familiar with it's limitations, but github packages seems like it would be worth considering. Keeping packages in the GitHub might make it less scary for newcomers to contribute, since there isn't another tool to learn. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Why?
Modern development ecosystems (Java, JavaScript, Python, etc.) rely heavily on dependency management, yet this practice is largely absent in OpenEdge ABL development. This creates significant challenges as OpenEdge code reuse typically relies on copy-pasting source files between projects, network shares with common code, manual .pl library management without clear versioning, and complex PROPATH configurations that are hard to maintain.
Using dependencies would have a direct impact on:
Proposed solution
The Language Server will rely on the Maven standard for dependencies for several reasons:
Dependencies are declared in the standard
openedge-project.jsonconfiguration file, next tobuildPathentries.With this syntax, all dependencies will be added after the last "source" entry and before any "propath" entry.
The alternate syntax would clarify in which order to dependencies are added in the propath.
During the initialization of the project, all dependencies will be fetched from the repository to the standard location (
$HOME/.m2/repository). Propath is then modified depending on the classifier and extension of the dependency. The very first version of the document only focuses oncompileandassemblydependencies.plandaplcompile dependencies are added to the propathzipcompile dependencies are extracted somewhere in the.builderdirectory of the project; eachplandaplin the root directory are added to the project, followed by the directory where the zip file is extracted. While simple OOABL dependencies can be pushed asploraplpackages, many dependencies also provide include files (temp-table and dataset definition for example) that are needed in the propath.zipassembly dependencies are extracted somewhre in the.builderdirectory of the project, then the LS will generate anassembly.configfile pointing to the various directories where the DLL are located❓ Any extra classifier or post-processing required?
The runtime propath (in VS Code) will also be modified to reflect the list of dependencies. A solution has to be found to inject propath in VS Code tasks.
As in Java,
compiledependencies can have matchingjavadocandsourcesartifacts. Those artifacts will also be fetched and used by VS Code to show more information to the developer. The debugger will also use thesourcespackage to show source code.Initial implementation
$HOME/.m2/settings.xmlwill be used to connect to remote repositories. First implementation will always use the default profile; support for profiles will be added later.Future improvements
com.vendor.framework:fwname:9.1.0depends oncom.vendor.framework:fwname2:7.4.1andcom.progress.openedge:net:12.8.9, so it's not required to specify those dependencies in the JSON file. Transitive dependencies are specified when packages are pushed to the repository.<VSCodeConfiguration />child node to<PCTRun>that will manage dependencies and create propath on the flyBeta Was this translation helpful? Give feedback.
All reactions