diff --git a/.gitignore b/.gitignore index 923c909..7e493aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,26 @@ -# content ignored due to licensing if its content -workspace -derby.log -conf/jetty/gen/ -conf/jetty/p2/ +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties -# migration of configuration files, this will be able to be removed -# again later -#conf/jetty/user_configs/sdk_files.cfg +# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored) +!/.mvn/wrapper/maven-wrapper.jar -scripts/my_* - -# gradle -.gradle/ - -# idea -.idea/ -*.iml +.gradle +**/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea +jde/ +jde-slim/ +backup/ +jazz-debug-environment-2.iml *.swp +buildSrc/out diff --git a/README.MD b/README.MD deleted file mode 100644 index d7c7883..0000000 --- a/README.MD +++ /dev/null @@ -1,112 +0,0 @@ -# Jazz Debug Environment -The goal of this project is to provide you with a ready-to-go environment for extending your jazz applications. - -## Limitations -Please note that this approach currently **works only for RTC 6.0.3**. See [GitHub Issue](https://github.com/jazz-community/jazz-debug-environment/issues/4) and [jazz.net Enhancement](https://jazz.net/jazz/web/projects/Rational%20Team%20Concert#action=com.ibm.team.workitem.viewWorkItem&id=438754) for more information. - -## Prerequisites - - Rational Team Concert Server SDK, download from [Jazz.net](https://jazz.net/downloads/rational-team-concert/) (make sure that you choose the right version) - - IBM JRE (Java Runtime Environment by IBM). Can be extracted from a download that contains the JTS (eg. JTS-CCM-keys). Downloads can also be found on [Jazz.net](https://jazz.net/downloads/rational-team-concert/). - -## Installation - 1. Click the 'Clone or download' button on GitHub, then do one of the following: - - Download & extract the ZIP file to your desired location - - Copy the clone URL, navigate to the desired location on your machine and use `git clone https://github.com/jazz-community/jazz-debug-environment.git` to get this repos content - 2. Extract the RTC Server SDK into the 'sdk' folder. - 3. Extract/Copy the IBM JRE into the 'jre' folder. - 4. Extract one of the database presets which are available within the 'db_presets' folder into the 'db' folder - 5. Verify that your folder structure looks like the following: - -``` -├── jazz-debug-environment/ -│ ├── conf/ -│ ├── db_presets/ -│ │ ├── .... -│ ├── db/ -│ │ ├── conf/ -│ ├── jre/ -│ │ ├── bin/ -│ │ ├── docs/ -│ │ ├── lib/ -│ │ ├── properties/ -│ │ ├── .... -│ ├── sdk/ -│ │ ├── features/ -│ │ ├── license/ -│ │ ├── plugins/ -``` -## Configure Extensions for Debugging -In order to be able to debug your extensions, modify the `my_workspaces.cfg`, stored within `conf\jetty\user_configs` to contain your extensions. The file content could look like the following (whereas lines starting with a **`#`** are ignored): -``` -C\:/myWork/com.siemens.bt.jazz.ui.WorkItemBulkMover@start -D\:/myOtherWork/com.siemens.bt.jazz.rtc.workitemeditor.presentation.statushistory@start -# C\:/somewhere-else/rtc-create-child-item-plugin@start -``` - -## Check out correct branch -The master branch is meant for working with Windows. For working with bash under Linux, check out the linux branch `git checkout linux`. - -## Start the Server - - If you have changed your configuration, or are running this for the first time, do the following: - * Windows: run the `generate_jetty_config.ps1` script which can be found in the `conf/jetty` folder - * Linux: run the `generate_jetty_config.sh` script in the `conf/jetty` - - Start the server - * Windows: by double-clicking `click_launch.ps1` or running `run_jetty.ps1` - * Linux: by running `run_jetty.sh` - - Open [https://localhost:7443/jazz](https://localhost:7443/jazz) in a browser of your choice - - When prompted for credentials, type **ADMIN** as your User ID and use the same (**ADMIN**) as password - - Start debugging your Jazz extensions - -![Example service debugging](https://github.com/jazz-community/jazz-debug-environment/blob/master/docs/images/debugging-services.png) - -## Hints -### Execute ps1 files on double-click -The con of using ps1 files is that they can't be executed automatically on double click by default. So if you want to make ps1 files behave in the same way as conventional command files, modify the following registry key: - -> HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\command - -change the default value to the following: - -> "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noLogo -ExecutionPolicy unrestricted -file "%1" - -[Source](http://stackoverflow.com/a/20623597) - -## Upgrade Debug Environment -We will try to release a new version of the Debug Environment as soon as possible, so that you can only pull the latest changes from GitHub. If you cannot wait or if you would like to contribute to our project by providing it with an upgrade package, head over to the [Upgrade Guide](https://github.com/jazz-community/jazz-debug-environment/blob/master/UPGRADE.MD) - -## Using the scripts for IntelliJ (Community Edition) -This project comes with batch files intended for debugging the jetty launch configuration as a remote server from within IntelliJ community edition. This section explains how to use the provided files for setting up debug launch configurations that automatically launch and attach to an instance of jetty. - -If you are using the Ultimate Edition of IntelliJ, you can just setup a standard jetty launch configuration and don't need to rely on any of the files mentioned in this section. - -#### Setup debug configuration - - 1. Open 'Run -> Edit Configurations' - 2. Press '+' and select 'Remote' - 3. Choose a name for your debug configuration - 4. Select 'Single instance only' - 5. Set the port to 9999 - -In the next steps, we will set up the provided scripts to launch jetty and ensure that only one instance is running at any given time. - - 6. Add before launch -![alt tag](https://github.com/jazz-community/jazz-debug-environment/blob/master/docs/images/add_before_launch.png) - 7. Select 'Run external tool' from the drop down - 8. Create a new tool by pressing '+' - 9. Call this external tool 'Run Jetty'. This will be used to launch a new instance of jetty from the repository. - 10. Adjust the settings according to the screenshot. **Make sure to adjust the path to point to your repository location** -![alt tag](https://github.com/jazz-community/jazz-debug-environment/blob/master/docs/images/start_jetty_config.png) - 11. Create another external tool, this time calling it 'Stop Jetty'. This will be used to kill any running debugging instance of jazz running in jetty. As before, mimic the settings in the screenshot. **Make sure to adjust the path to point to your repository location** -![alt tag](https://github.com/jazz-community/jazz-debug-environment/blob/master/docs/images/stop_jetty_config.png) - 12. Confirm that your setup resembles the screenshot. Make sure that the 'Stop Jetty' tool runs before the 'Run Jetty' tool. This can be adjusted with the arrows above the list view. -![alt tag](https://github.com/jazz-community/jazz-debug-environment/blob/master/docs/images/completed_debug_configuration.png) - 13. To run jetty from IntelliJ, click 'Run -> Debug... -> ' - -## Contributing -Please use the [Issue Tracker](https://github.com/jazz-community/jazz-debug-environment/issues) of this repository to report issues or suggest enhancements. - -For general contribution guidelines, please refer to [CONTRIBUTING.md](https://github.com/jazz-community/jazz-debug-environment/blob/master/CONTRIBUTING.md) - -## Licensing -Copyright (c) Siemens AG. All rights reserved.
-Licensed under the [MIT](https://github.com/jazz-community/jazz-debug-environment/blob/master/LICENSE) License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5974c27 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Jazz Development Environment +## Introduction +Jazz Development Environment provides you with tooling for developing RTC Plugins. Main features include running a jetty server for hot deployment and live debugging of jazz plugins. + +Setup and usage is handled in a convention over configuration style, which keeps editing files and dealing with setup to a minimum. It is mainly focused on how `jazz-community` plugins are developed, but all related tools are open sourced under the [jazz community](https://github.com/jazz-community/) organization. + +## Wiki Table Of Contents +The [Wiki](https://github.com/jazz-community/jazz-debug-environment/wiki) covers a vast amount of topics on how to work with the jazz development environment. + +* [Home](Home) +* [Quick Start](https://github.com/jazz-community/jazz-debug-environment/wiki/2.0-Quick-Start) + * [Requirements](https://github.com/jazz-community/jazz-debug-environment/wiki/2.1-Requirements) + * [Instructions](https://github.com/jazz-community/jazz-debug-environment/wiki/2.2-Instructions) +* [User Guide](https://github.com/jazz-community/jazz-debug-environment/wiki/3.0-User-Guide) + * [Links](https://github.com/jazz-community/jazz-debug-environment/wiki/3.1-Links) + * [Using the command line](https://github.com/jazz-community/jazz-debug-environment/wiki/3.2-Using-the-command-line) + * [Windows](https://github.com/jazz-community/jazz-debug-environment/wiki/3.2.1-Windows) + * [Linux](https://github.com/jazz-community/jazz-debug-environment/wiki/3.2.2-Linux) + * [Using Intellij](https://github.com/jazz-community/jazz-debug-environment/wiki/3.3-Using-IntelliJ) + * [Plugins](https://github.com/jazz-community/jazz-debug-environment/wiki/3.4-Plugins) + * [Debugging](https://github.com/jazz-community/jazz-debug-environment/wiki/3.5-Debugging) + * [Custom Parameters](https://github.com/jazz-community/jazz-debug-environment/wiki/3.6-Custom-Parameters) + * [Migration](https://github.com/jazz-community/jazz-debug-environment/wiki/3.7-Migration) +* [Tasks](https://github.com/jazz-community/jazz-debug-environment/wiki/5.0-Tasks) + * [Bootstrap](https://github.com/jazz-community/jazz-debug-environment/wiki/5.1-Bootstrap) + * [Setup](https://github.com/jazz-community/jazz-debug-environment/wiki/5.2-Setup) + * [Info](https://github.com/jazz-community/jazz-debug-environment/wiki/5.3-Info) + * [Run](https://github.com/jazz-community/jazz-debug-environment/wiki/5.4-Run) + * [Backup](https://github.com/jazz-community/jazz-debug-environment/wiki/5.5-Backup) +* [Developer Guide](https://github.com/jazz-community/jazz-debug-environment/wiki/6.-Developer-Guide) +* [FAQ](https://github.com/jazz-community/jazz-debug-environment/wiki/7.-FAQ) + +## Contributing +Please use the [Issue Tracker](https://github.com/jazz-community/jazz-debug-environment/issues) of this repository to report issues or suggest enhancements. + +For general contribution guidelines, please refer to [CONTRIBUTING.md](https://github.com/jazz-community/welcome/blob/master/CONTRIBUTING.md). + +## Licensing +Copyright (c) Siemens AG. All rights reserved.
+Licensed under the [MIT](https://github.com/jazz-community/rtc-git-connector/blob/master/LICENSE) License. diff --git a/UPGRADE.MD b/UPGRADE.MD deleted file mode 100644 index f9f3390..0000000 --- a/UPGRADE.MD +++ /dev/null @@ -1,92 +0,0 @@ -# Upgrade Debug Environment -This Guide describes on how to create a Debug Environment for a new Release of Jazz. -If you just wish to use the Debug Environment, read our main [README](https://github.com/jazz-community/jazz-debug-environment/blob/master/README.MD) - -We will try to release a new version of the Debug Environment as soon as possible, so that you can only pull the latest changes from GitHub. If you cannot wait or if you would like to contribute to our project by providing it with an upgrade package, you may follow the instructions below. - -### Prepare your own package -Please note: this was accurate as of 6.0.3, it may change in future releases. If so, please contribute such hints back to this documentation - -#### Prerequisites -Required Downloads from the *All Downloads* section on [Jazz.net](https://jazz.net/downloads/rational-team-concert/): - -- 10-Free Developers License Activation Kit -- Client for Eclipse 4.2.x IDE -- Rational Team Concert **Server** SDK - -One more Download is required: -- Go to the feature based launches wiki page at https://jazz.net/wiki/bin/view/Main/FeatureBasedLaunches -- Scroll down to the end of the page. Download the latest available version of the feature based launcher for Eclipse 4.4.2 or later. At the time of writing the version is *launcher442.zip*. - -#### Installation - -The following instruction are a compact excerpt of [Ralph Schoon's Extension Workshop written for 6.0.3](https://rsjazz.wordpress.com/2017/03/17/updated-rtc-extensions-workshop-for-rtc-6-0-3). - -- Extract all Downloads on your local machine -- In the extracted folder containing the feature based launches (e.g. launcher442\plugins) locate the JAR file named *com.ibm.team.dev.launch_0.3.13.201605301342.jar* (or similar). Copy it into the RTC Eclipse Client dropins folder. Create a folder named **dropins** if it does not exist. -- Start **eclipse.exe** from inside the RTC Client Eclipse package. During start, define a workspace folder if not already set. -- Target Platform Setup: - - From the RTC Eclipse Client menu bar, select **Window > Preferences**. In the Preferences dialog, select **Plug-in Development > Target Platform**. Wait for the load process to finish, then click **Add...** - - In the New Target Definition wizard, select **Nothing: Start with an empty target definition** and then click **Next**. - - On the second page of the wizard, enter **RTC Server SDK** as the Name and click **Add...** - - In the Add Content wizard, select **Installation** and then click **Next** - - On the second page of the wizard, set the path to the downloaded and extracted *RTC Server SDK* as the **Location** and then click **Finish** - - After the operation completes, click **Finish** in the New Target Definition wizard - - Back on the Preferences dialog, select the new **RTC Server SDK Target Definition** and then click **OK** -- Database Creation: - - From the menu bar, select **File > Import…** and then in the Import wizard, select **Plug-in Development > Plug-ins and Fragments** and then click **Next** - - Make sure that **Import From** is set to **Target Definition** and **RTC Server SDK** is selected for it. Set **Import as** to **Project with source folders**. Then click **Next** - - Enter **com.ibm.team.common.tests.utils** into the ID field and select the plug-in matching that ID (Click **Add ->**). Click **Finish**. - - In the top right corner of Eclipse, switch to the **Plug-in Development** perspective - - Select **Run Configurations…** from the drop down menu of the Run toolbar icon - - On the Run Configurations dialog, select **JUnit2 Launch > [Standard] Create Test Database** and then click **Run** - - This may take a while to run. The *Console* view will appear and show quite a bit of output. The *JUnit* view will also be active. When the database creation is complete, the *JUnit* view will show success. Note that the Console view will show some exceptions. Be patient, this takes a good while and unless the launch is terminated, let it keep running. **The important thing is that the JUnit view shows success. If it fails, retry again and again until it succeeds** -- Run local Jazz server: - - Navigate again to **Run Configurations…**. This time, choose **[JSA Standard] Jetty (Standalone)** and click **Run** to start a local development server. - - The **Console** will print a lot of info and error messages. Just ignore them - - Open a web browser and navigate to **https://localhost:9443/jazz/admin**. Type **ADMIN** as user ID and **ADMIN** as password as soon as the login screen appears. - - Deploy Predefined Process Templates. Navigate to **Templates** and click on **Deploy Predefined Templates**. - - Import the 10 Free Developer Licenses you've initially downloaded. Navigate to **Server > License Key Management** and click **Add...** in the *Client Access License Types* grid. Upload the License ZIP file and work through the installation wizzard. - - Shutdown the local server by closing Eclipse - -#### Copy Database -Create the following folder structure: -``` --- conf ----- jazz -------- indices -------- derby ---------- **repositoryDB** -``` - -Parallel to your eclipse workspace, there is another folder named **\-testDB**. Copy it's contents over into the above created **repositoryDB** folder. - -Create a ZIP file out of the above created **conf** folder and name it **\_db.zip** (e.g. 604_db.zip) and create a pull request on GitHub if you want to share this DB preset with the community. - -#### Create sdk_files.cfg -Navigate to the following folder (whereas `${workspace_loc}` is the folder of your Eclipse workspace) - - ${workspace_loc}\.metadata\.plugins\org.eclipse.pde.core\[JSA Standard] Jetty (Standalone)\org.eclipse.equinox.simpleconfigurator - -Within this folder, grab the file named `bundles.info` and copy it to `conf/jetty/user_configs/`. Open the file in Notepad++ (or any other editor which supports regular expressions). -Use the Find/Replace feature in Notepad++: - - - Find: `.*(\/plugins\/)(.*(.jar|\/)).*` - - Replace: `$2@start` - - Set 'Search Mode' to 'Regular Expression' and do NOT tick 'matches newline' - - Apply using 'Replace All' - - Verify results (see example below) - - Rename to `sdk_files.cfg` (will overwrite the one which was created for a previous jazz version) - -**Example before Find/Replace** -``` -com.hp.hpl.jena.rdf,2.7.2000.v20160630_1732,file:/C:/RTC603Dev/installs/rtc-server-sdk/plugins/com.hp.hpl.jena.rdf_2.7.2000.v20160630_1732/,4,true -com.ibm.icu,52.1.1.v201501240615,file:/C:/RTC603Dev/installs/rtc-server-sdk/plugins/com.ibm.icu_52.1.1.v201501240615.jar,4,true -``` - -**Example after Find/Replace** -``` -com.hp.hpl.jena.rdf_2.7.2000.v20160630_1732/@start -com.ibm.icu_52.1.1.v201501240615.jar@start -``` - diff --git a/build.gradle b/build.gradle index 9217cb3..e17bdfa 100644 --- a/build.gradle +++ b/build.gradle @@ -1,52 +1,78 @@ -apply plugin: 'java' +import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormat +import org.jazzcommunity.development.BackupTask +import org.jazzcommunity.development.BootStrapTask +import org.jazzcommunity.development.RunTask +import org.jazzcommunity.development.SetupTask +import org.jazzcommunity.development.InfoTask +import org.jazzcommunity.development.library.DetectOperatingSystem +import org.jazzcommunity.development.library.RuntimeDetector +import org.jazzcommunity.development.library.config.ConfigReader -import org.gradle.internal.os.OperatingSystem; - -task detect { - doLast { - println("Linux: " + OperatingSystem.current().isLinux()) - println("Windows: " + OperatingSystem.current().isWindows()) - } +plugins { + id 'java-gradle-plugin' + id 'com.github.sherter.google-java-format' version '0.7.1' } -task cleanup(type: Exec) { - group "Jetty" - description "Delete generated and runtime files" - if (OperatingSystem.current().isWindows()) { - workingDir './' - commandLine 'powershell.exe', './scripts/clean.ps1' - } +repositories { + jcenter() + mavenCentral() +} - if (OperatingSystem.current().isLinux()) { - workingDir './' - commandLine './clean.sh' - } +task format(type: GoogleJavaFormat) { + group = "jde development" + description = "Format jde source code according to the google code style." } -task generate(type: Exec) { - group "Jetty" - description "Create jazz and equinox configuration files" - if (OperatingSystem.current().isWindows()) { - workingDir 'conf/jetty' - commandLine 'powershell.exe', '../../scripts/generate_jetty_config.ps1' - } +googleJavaFormat { + group = "jde development" + description = "Source folders to include in formatting." + include 'buildSrc/**' +} - if (OperatingSystem.current().isLinux()) { - workingDir './conf/jetty' - commandLine './generate_jetty_config.sh' - ignoreExitValue true - } +task bootstrap(type: BootStrapTask) { + group = "Jazz Development Environment" + description = "Create folders for user environment. Generally only needs to be run once." } -task run(type: Exec) { - group "Jetty" - description "Start jazz server" - if (OperatingSystem.current().isWindows()) { - workingDir './' - commandLine 'cmd', '/K', 'start', 'powershell','./scripts/run_jetty.ps1' - } +task info(type: InfoTask) { + group = "Jazz Development Environment" + description = "Print information of the currently available configuration." +} - if (OperatingSystem.current().isLinux()) { - } +task backup(type: BackupTask) { + group = "Jazz Development Environment" + description = "Backup user files. Options: [--mode=slim|user|full], default=slim" + // default mode used when no command line argument is supplied, eg no '--mode=full' + mode = "slim" +} +task setup(type: SetupTask) { + group = "Jazz Development Environment" + description = "Setup a new runtime based on an RTC sdk. Options: [--sdk=VERSION], default=latest" + // will default to setting up the latest sdk version + sdk = "" } + +allprojects { + afterEvaluate { project -> + def runtime = RuntimeDetector.get(project) + if (runtime.isPresent()) { + project.task('run', type: RunTask) { + group = "Jazz Development Environment" + description = "Run a jetty server for debugging. Options: [-Pruntime=VERSION], default=latest" + workingDir './jde/runtime/' + runtime.get() + // Somehow, the native OperatingSystem interface doesn't work properly yet + // It's an incubating feature, so I guess we'll just have to wait. + if (DetectOperatingSystem.windows) { + commandLine 'cmd', '/K', 'start', 'powershell', './run_jetty.ps1' + } + + if (DetectOperatingSystem.linux) { + def line = ConfigReader.terminalEmulator() + commandLine line + } + } + } + + } +} \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle new file mode 100644 index 0000000..c92c3a4 --- /dev/null +++ b/buildSrc/build.gradle @@ -0,0 +1,22 @@ +plugins { + id 'java-gradle-plugin' +} + +dependencies { + compile group: 'org.apache.commons', name: 'commons-compress', version: '1.18' + // this needs to be in here because of a known limitation: + // https://stackoverflow.com/questions/28229095/apache-commons-compress-using-7zip + compile group: 'org.tukaani', name: 'xz', version: '1.8' + compile group: 'com.google.guava', name: 'guava', version: '26.0-jre' + compile "org.jtwig:jtwig-core:5.87.0.RELEASE" +} + +repositories { + jcenter() + mavenCentral() +} + +tasks.withType(JavaCompile) { + options.compilerArgs << "-Xlint:unchecked" + options.deprecation = true +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/BackupTask.java b/buildSrc/src/main/java/org/jazzcommunity/development/BackupTask.java new file mode 100644 index 0000000..bb02559 --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/BackupTask.java @@ -0,0 +1,62 @@ +package org.jazzcommunity.development; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.options.Option; +import org.jazzcommunity.development.library.FileTools; +import org.jazzcommunity.development.library.zip.SevenZip; + +public class BackupTask extends DefaultTask { + private String mode; + + private static String[] SLIM_FILTER = {"sdks", "servers", "sdk", "jre"}; + + /** + * Create a zip file of the complete jde folder, either for backing up or giving to someone else + */ + @TaskAction + public void backup() throws IOException { + if (!FileTools.exists("backup")) { + FileTools.createDirectories(new String[] {"backup"}); + } + + String filename = + String.format( + "backup/backup_%s_%s_%s.7z", + System.getProperty("os.name"), + System.getProperty("user.name"), + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())); + + switch (mode) { + case "full": + System.out.println("Doing full back up"); + SevenZip.compress(filename, FileTools.toAbsolute("jde")); + break; + case "slim": + System.out.println("Doing slim back up"); + SevenZip.compress(filename, SLIM_FILTER, FileTools.toAbsolute("jde")); + break; + case "user": + System.out.print("Backing up user files"); + SevenZip.compress(filename, FileTools.toAbsolute("jde/user")); + break; + default: + System.out.println("No backup option selected, aborting."); + break; + } + } + + @Input + public String getMode() { + return mode; + } + + @Option(option = "mode", description = "Sets which backup mode to use.") + public void setMode(String mode) { + this.mode = mode; + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/BootStrapTask.java b/buildSrc/src/main/java/org/jazzcommunity/development/BootStrapTask.java new file mode 100644 index 0000000..e4026cd --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/BootStrapTask.java @@ -0,0 +1,26 @@ +package org.jazzcommunity.development; + +import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.TaskAction; +import org.jazzcommunity.development.library.FileTools; + +public class BootStrapTask extends DefaultTask { + private static String[] directories = { + "jde", "jde/user", "jde/runtime", "jde/servers", "jde/sdks", "jde/dbs", "jde/user/workspaces" + }; + + @TaskAction + public void bootstrap() { + if (FileTools.exists("jde")) { + System.out.println("ABORT!"); + System.out.println("Jazz Debug Environment already exists."); + return; + } + + FileTools.createDirectories(directories); + FileTools.copyAll("tool/db_presets", "jde/dbs"); + FileTools.copyFile("tool/templates/run_time_parameters.cfg", "jde/user"); + FileTools.copyFile("tool/templates/linux_terminal_emulator.cfg", "jde/user"); + FileTools.copyFile("tool/templates/workspaces_template.cfg", "jde/user/workspaces"); + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/InfoTask.java b/buildSrc/src/main/java/org/jazzcommunity/development/InfoTask.java new file mode 100644 index 0000000..7c177e5 --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/InfoTask.java @@ -0,0 +1,36 @@ +package org.jazzcommunity.development; + +import java.io.File; +import java.util.Arrays; +import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.TaskAction; +import org.jazzcommunity.development.library.FileTools; +import org.jazzcommunity.development.library.RuntimeDetector; +import org.jazzcommunity.development.library.config.ConfigReader; + +public class InfoTask extends DefaultTask { + /** + * Print available versions, and possibly missing files. For every version, there must be an sdk, + * server and database file available. + */ + @TaskAction + public void versions() { + System.out.println("Available SDK versions:"); + printFiles("jde/sdks"); + System.out.println("Available Servers / JRE versions:"); + printFiles("jde/servers"); + System.out.println("Available databases:"); + printFiles("jde/dbs"); + System.out.println("Available configurations:"); + printFiles("tool/sdk_files"); + System.out.println("Set up run times: "); + RuntimeDetector.getRuntimes().forEach(System.out::println); + System.out.println("Available plugins:"); + ConfigReader.userConfiguration().forEach(System.out::println); + } + + private static void printFiles(String path) { + File directory = FileTools.toAbsolute(path); + Arrays.stream(directory.listFiles()).forEach(file -> System.out.println("\t" + file.getName())); + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/RunTask.java b/buildSrc/src/main/java/org/jazzcommunity/development/RunTask.java new file mode 100644 index 0000000..9054e7a --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/RunTask.java @@ -0,0 +1,15 @@ +package org.jazzcommunity.development; + +import org.gradle.api.tasks.Exec; +import org.jazzcommunity.development.library.RuntimeDetector; +import org.jazzcommunity.development.library.config.ConfigWriter; + +@SuppressWarnings("unchecked") +public class RunTask extends Exec { + + @Override + protected void exec() { + RuntimeDetector.get(getProject()).ifPresent(ConfigWriter::prepareConfigurations); + super.exec(); + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/SetupTask.java b/buildSrc/src/main/java/org/jazzcommunity/development/SetupTask.java new file mode 100644 index 0000000..5095e9e --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/SetupTask.java @@ -0,0 +1,90 @@ +package org.jazzcommunity.development; + +import java.io.File; +import java.io.IOException; +import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.options.Option; +import org.jazzcommunity.development.library.FileTools; +import org.jazzcommunity.development.library.VersionChecker; +import org.jazzcommunity.development.library.zip.Zip; + +public class SetupTask extends DefaultTask { + + private String sdk; + + /** + * This will have to read the version from the command line, otherwise, the newest version will be + * used. If no files are available, this needs to print a warning. + */ + @TaskAction + public void initialize() throws IOException { + // so if the sdk version is empty, we find the newest one... + // I'm not yet sure how that is going to work with non-major releases, but we'll see + String version = sdk.isEmpty() ? FileTools.newestVersion("jde/sdks") : sdk; + System.out.println(String.format("SDK Version %s selected for runtime setup", version)); + + // abort if a runtime already exists + if (FileTools.exists(String.format("jde/runtime/%s", version))) { + System.out.println(String.format("Runtime for %s already exists. Doing nothing.", version)); + return; + } + + // we need some sort of sanity check if we can set up a proper runtime + // 1) check sdk + // 2) check server + // 3) check database + // 4) check sdk_files.cfg + if (VersionChecker.canSetup(version)) { + setup(version); + } + } + + private static void setup(String version) throws IOException { + // decompression works, now we just need to do it for all necessary files. + // 1) extract sdk + extract( + FileTools.byVersion("jde/sdks", version), + FileTools.toAbsolute(String.format("jde/runtime/%s/sdk", version))); + // 2) extract server + extract( + FileTools.byVersion("jde/servers", version), + FileTools.toAbsolute(String.format("jde/runtime/%s/jre", version)), + "server/jre"); + // 3) extract database + extract( + FileTools.byVersion("jde/dbs", version), + FileTools.toAbsolute(String.format("jde/runtime/%s/db", version))); + // 4) copy other necessary static files, probably also needs checks... + // I'm still hoping that I can eventually run this stuff without needing the run files... + copyConfigs(version); + // 5) set executable bit on necessary files + FileTools.setExecutable( + FileTools.toAbsolute(String.format("jde/runtime/%s/jre/bin/java", version))); + } + + private static void copyConfigs(String version) { + String source = String.format("tool/configs/%s", version); + String target = String.format("jde/runtime/%s/conf", version); + + System.out.println(String.format("Copying configuration files from %s to %s", source, target)); + + FileTools.makeDirectory(FileTools.toAbsolute(target)); + FileTools.copyAll(source, target); + } + + @Option(option = "sdk", description = "Which SDK version to set up. Default is latest.") + public void setSdk(String sdk) { + this.sdk = sdk; + } + + // these are just wrappers to enable logging for extracted files + private static void extract(File from, File to) throws IOException { + extract(from, to, ""); + } + + private static void extract(File from, File to, String subfolder) throws IOException { + System.out.println(String.format("Decompress %s to %s", from, to)); + Zip.decompress(from, to, subfolder); + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/DetectOperatingSystem.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/DetectOperatingSystem.java new file mode 100644 index 0000000..81e83ce --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/DetectOperatingSystem.java @@ -0,0 +1,11 @@ +package org.jazzcommunity.development.library; + +public class DetectOperatingSystem { + public static boolean isWindows() { + return System.getProperty("os.name").toLowerCase().contains("windows"); + } + + public static boolean isLinux() { + return System.getProperty("os.name").toLowerCase().contains("linux"); + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/FileTools.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/FileTools.java new file mode 100644 index 0000000..6fdbc2d --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/FileTools.java @@ -0,0 +1,116 @@ +package org.jazzcommunity.development.library; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class FileTools { + private FileTools() {} + + public static void copyAll(String from, String to) { + File f = toAbsolute(from); + File t = toAbsolute(to); + Arrays.stream(Objects.requireNonNull(f.listFiles())).forEach(file -> copyFile(file, t)); + } + + public static void createDirectories(String[] directories) { + Arrays.stream(directories).map(FileTools::toAbsolute).forEach(FileTools::makeDirectory); + } + + public static boolean exists(String path) { + File file = toAbsolute(path); + return file.exists(); + } + + public static File[] getFiles(String path) { + File file = toAbsolute(path); + return file.listFiles(); + } + + public static File toAbsolute(String dir) { + return new File(String.format("%s/%s", System.getProperty("user.dir"), dir)); + } + + public static File byVersion(String dir, String version) { + return Arrays.stream(getFiles(dir)) + .filter(file -> file.getName().contains(version)) + .findFirst() + .orElse(new File("File that doesn't exist")); + } + + public static String newestVersion(String dir) { + // ugly workaround, but when this happens, there isn't anything there. + if (getFiles(dir) == null || getFiles(dir).length <= 0) { + return null; + } + + File file = newestFile(dir); + if (file.isDirectory()) { + return file.getName(); + } + return extractVersion(file); + } + + public static File newestFile(String dir) { + File[] files = getFiles(dir); + + if (files == null) { + throw new RuntimeException(String.format("No files available in %s.", dir)); + } + + return Arrays.stream(files).min(Comparator.reverseOrder()).get(); + } + + public static void makeDirectory(File path) { + try { + Files.createDirectories(path.toPath()); + } catch (IOException e) { + Logger logger = LoggerFactory.getLogger("FileTools.makeDirectory"); + logger.error(String.format("Could not create %s because %s", path, e.getMessage())); + } + } + + public static void setExecutable(String filepath) { + setExecutable(toAbsolute(filepath)); + } + + public static void setExecutable(File file) { + if (System.getProperty("os.name").contains("inux")) { + file.setExecutable(true); + } + } + + public static void copyFile(String from, String to) { + copyFile(toAbsolute(from), toAbsolute(to)); + } + + public static void copyFile(File from, File to) { + try { + File destination = new File(to, from.getName()); + Files.copy(from.toPath(), destination.toPath(), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + Logger logger = LoggerFactory.getLogger("FileTools.copyFile"); + logger.error(String.format("Failed to copy files: %s", e.getMessage())); + if (logger.isTraceEnabled()) { + e.printStackTrace(); + } + } + } + + private static String extractVersion(File file) { + Pattern pattern = Pattern.compile("-([0-9].*).zip$"); + Matcher matcher = pattern.matcher(file.getName()); + // we only need exactly one match, so no need to loop + matcher.find(); + // this must be the one match we're looking for, otherwise input is crap + return matcher.group(1); + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/Runtime.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/Runtime.java new file mode 100644 index 0000000..ac382fa --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/Runtime.java @@ -0,0 +1,84 @@ +package org.jazzcommunity.development.library; + +import java.io.File; + +/** + * Data class representing a run time configuration. This might include other functionality later + * on, such as including other user configuration. + * + *

TODO: Improve error handling & logging... + */ +public class Runtime { + + private final File folder; + private final String version; + private final File osgi; + private final File configurator; + private final File launcher; + + public Runtime(File folder) { + this.folder = folder; + this.version = folder.getName(); + // TODO: This is certainly not the best way to deal with these configurations... + this.osgi = + new File(String.format("jde/runtime/%s/sdk/plugins", version)) + .listFiles((file, s) -> s.startsWith("org.eclipse.osgi_") && !s.contains("R"))[0]; + this.configurator = + new File(String.format("jde/runtime/%s/sdk/plugins", version)) + .listFiles( + (file, s) -> + s.startsWith("org.eclipse.equinox.simpleconfigurator_") && !s.contains("R"))[0]; + this.launcher = + new File(String.format("jde/runtime/%s/sdk/plugins", version)) + .listFiles( + (file, s) -> s.startsWith("org.eclipse.equinox.launcher_") && !s.contains("R"))[0]; + } + + public File getFolder() { + return folder; + } + + public String getVersion() { + return version; + } + + public File getOsgi() { + return osgi; + } + + public String getOsgiPath() { + return String.format("sdk/plugins/%s", osgi.getName()); + } + + public String getConfigurator() { + return configurator.getName(); + } + + public File getLauncher() { + return launcher; + } + + public String getLauncherPath() { + return String.format("sdk/plugins/%s", launcher.getName()); + } + + @Override + public String toString() { + return "\tRuntime {\n" + + "\t\tversion = " + + version + + ",\n" + + "\t\tfolder = " + + folder + + ",\n" + + "\t\tosgi = " + + getOsgiPath() + + ",\n" + + "\t\tconfigurator = " + + getConfigurator() + + ",\n" + + "\t\tlauncher = " + + getLauncherPath() + + "\n\t}"; + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/RuntimeDetector.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/RuntimeDetector.java new file mode 100644 index 0000000..0ec1d45 --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/RuntimeDetector.java @@ -0,0 +1,35 @@ +package org.jazzcommunity.development.library; + +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Stream; +import org.gradle.api.Project; + +public class RuntimeDetector { + private RuntimeDetector() {} + + public static Optional get(Project project) { + String runtime = + !project.hasProperty("runtime") + ? FileTools.newestVersion("jde/runtime") + : (String) project.getProperties().get("runtime"); + + if (runtime == null) { + return Optional.empty(); + } + + return Optional.of(runtime); + } + + public static Stream getRuntimes() { + return Arrays.stream(FileTools.getFiles("jde/runtime")).map(Runtime::new); + } + + public static Runtime getRuntime(String version) { + return getRuntimes() + .filter(r -> r.getVersion().equals(version)) + .findFirst() + .orElseThrow( + () -> new RuntimeException(String.format("Invalid run time setup for %s", version))); + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/VersionChecker.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/VersionChecker.java new file mode 100644 index 0000000..7e28245 --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/VersionChecker.java @@ -0,0 +1,28 @@ +package org.jazzcommunity.development.library; + +import java.util.Arrays; + +public final class VersionChecker { + private VersionChecker() {} + + private static final String[] REQUIRED_FILES = { + "jde/servers", "jde/sdks", "jde/dbs", "tool/sdk_files" + }; + + public static Boolean canSetup(String version) { + return Arrays.stream(REQUIRED_FILES).allMatch(d -> check(d, version)); + } + + // Extracted to function for explicit side-effect. Easiest way to deal with user + // feedback here... I know that this could do with a cleaner solution. + private static Boolean check(String dir, String version) { + boolean exists = FileTools.byVersion(dir, version).exists(); + + if (!exists) { + System.out.println( + String.format("Missing file for version %s in directory %s", version, dir)); + } + + return exists; + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/config/ConfigReader.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/config/ConfigReader.java new file mode 100644 index 0000000..b0ba42a --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/config/ConfigReader.java @@ -0,0 +1,85 @@ +package org.jazzcommunity.development.library.config; + +import com.google.common.io.CharSource; +import com.google.common.io.Files; +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.jazzcommunity.development.library.FileTools; + +public class ConfigReader { + public ConfigReader() {} + + public static String[] terminalEmulator() { + CharSource charSource = + Files.asCharSource( + FileTools.toAbsolute("jde/user/linux_terminal_emulator.cfg"), Charset.forName("UTF-8")); + + return filter(read(charSource)) + .findFirst() + .map(s -> s.trim()) + .map(s -> s.split(" ")) + .orElseGet(() -> new String[] {"gnome-terminal", "--", "./run_jetty.sh"}); + } + + /** + * This returns a list because we need to have a possible null-check when writing to the jtwig + * templates. Otherwise, this method would be a lot cleaner. + * + *

TODO: Move empty check to template + */ + public static List runtimeParameters() { + CharSource source = + Files.asCharSource( + FileTools.toAbsolute("jde/user/run_time_parameters.cfg"), Charset.forName("UTF-8")); + + List lines = filter(read(source)).map(String::trim).collect(Collectors.toList()); + + if (lines.isEmpty()) { + return null; + } + + return lines; + } + + public static Stream userConfiguration() { + File[] files = FileTools.getFiles("jde/user/workspaces"); + return Arrays.stream(files) + .map(f -> Files.asCharSource(f, Charset.forName("UTF-8"))) + .map(ConfigReader::read) + .map(ConfigReader::filter) + .flatMap(Function.identity()) + .map(File::new) + .map(IniEntry::getEntry); + } + + public static Stream sdkFiles(String version) { + CharSource source = + Files.asCharSource( + FileTools.toAbsolute(String.format("tool/sdk_files/sdk_files_%s.cfg", version)), + Charset.forName("UTF-8")); + return read(source); + } + + // TODO: duplicate code, same as in service entry. Extract both functions to something + // TODO: like "readVerboseError". Could be combined with the call to charsource + private static Stream read(CharSource source) { + try { + return source.lines(); + } catch (IOException e) { + System.out.println( + String.format("Error occurred reading configuration files: %s", e.getMessage())); + return Stream.empty(); + } + } + + // TODO: Make this a predicate for chaining the stream instead of passing the stream + private static Stream filter(Stream in) { + return in.filter(l -> !l.startsWith("#")).filter(l -> !l.isEmpty()); + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/config/ConfigWriter.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/config/ConfigWriter.java new file mode 100644 index 0000000..0c8cf94 --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/config/ConfigWriter.java @@ -0,0 +1,96 @@ +package org.jazzcommunity.development.library.config; + +import com.google.common.io.CharSink; +import com.google.common.io.Files; +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.List; +import java.util.stream.Collectors; +import org.jazzcommunity.development.library.FileTools; +import org.jazzcommunity.development.library.Runtime; +import org.jazzcommunity.development.library.RuntimeDetector; +import org.jtwig.JtwigModel; +import org.jtwig.JtwigTemplate; + +public final class ConfigWriter { + private ConfigWriter() {} + + public static void prepareConfigurations(String runtime) { + String folder = runtime.isEmpty() ? FileTools.newestVersion("jde/runtime") : runtime; + System.out.println("Generate run time configurations."); + System.out.println(String.format("Preparing %s run time", folder)); + + try { + System.out.println("Writing config.ini"); + writeIni(folder); + System.out.println("Writing dev.properties"); + writeProperties(folder); + System.out.println("Creating executable files"); + writeExecutables(folder); + } catch (IOException e) { + System.out.println(String.format("Runtime configuration failed: %s", e.getMessage())); + } + } + + private static void writeExecutables(String folder) throws IOException { + String to = String.format("jde/runtime/%s/", folder); + Runtime runtime = RuntimeDetector.getRuntime(folder); + makeScript("tool/scripts/run_jetty_bash.twig", to + "run_jetty.sh", runtime); + makeScript("tool/scripts/run_jetty_powershell.twig", to + "run_jetty.ps1", runtime); + FileTools.setExecutable(String.format("jde/runtime/%s/run_jetty.sh", folder)); + } + + private static void makeScript(String source, String destination, Runtime runtime) + throws IOException { + CharSink out = Files.asCharSink(FileTools.toAbsolute(destination), Charset.forName("UTF-8")); + List parameters = ConfigReader.runtimeParameters(); + JtwigTemplate template = JtwigTemplate.fileTemplate(FileTools.toAbsolute(source)); + JtwigModel model = + JtwigModel.newModel() + .with("launcher", runtime.getLauncherPath()) + .with("parameters", parameters); + out.write(template.render(model)); + } + + private static void writeProperties(String folder) throws IOException { + CharSink file = + Files.asCharSink( + FileTools.toAbsolute(String.format("jde/runtime/%s/conf/dev.properties", folder)), + Charset.forName("UTF-8")); + + List properties = + ConfigReader.userConfiguration() + .filter(IniEntry::needsPropertyEntry) + .map(IniEntry::getPropertiesLine) + .collect(Collectors.toList()); + + JtwigTemplate template = + JtwigTemplate.fileTemplate(FileTools.toAbsolute("tool/templates/dev.twig")); + JtwigModel model = JtwigModel.newModel().with("properties", properties); + file.write(template.render(model)); + } + + private static void writeIni(String folder) throws IOException { + CharSink ini = + Files.asCharSink( + FileTools.toAbsolute(String.format("jde/runtime/%s/conf/config.ini", folder)), + Charset.forName("UTF-8")); + + JtwigTemplate template = + JtwigTemplate.fileTemplate(FileTools.toAbsolute("tool/templates/config.twig")); + + Runtime runtime = RuntimeDetector.getRuntime(folder); + + JtwigModel model = + JtwigModel.newModel() + .with("osgiPath", runtime.getOsgi().getName()) + .with("configurator", runtime.getConfigurator()) + .with("bundles", ConfigReader.sdkFiles(folder).collect(Collectors.toList())) + .with( + "configs", + ConfigReader.userConfiguration() + .map(IniEntry::getIniLine) + .collect(Collectors.toList())); + ini.write(template.render(model)); + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/config/IniEntry.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/config/IniEntry.java new file mode 100644 index 0000000..8a84f54 --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/config/IniEntry.java @@ -0,0 +1,70 @@ +package org.jazzcommunity.development.library.config; + +import java.io.File; +import java.util.Arrays; + +/** + * Class for handling plugin directory lookup. Should decide if the plugin is a UI plugin or a + * "service" type plugin. That will determine which kind of entry is written, and if we need a + * properties entry. + */ +public interface IniEntry { + + static IniEntry getEntry(File directory) { + File[] files = directory.listFiles(); + + if (!directory.isDirectory() || files == null) { + return new InvalidEntry(directory); + } + + // the matching logic here is still pretty funky + if (Arrays.stream(files).anyMatch(f -> f.getName().equals("META-INF"))) { + return new UiEntry(directory); + } + + if (Arrays.stream(files).anyMatch(f -> f.getName().equals("plugin"))) { + return new ServiceEntry(directory); + } + + // TODO: add more details to exception message + throw new RuntimeException("Invalid file configuration. Fatal."); + } + + String getIniLine(); + + String getPropertiesLine(); + + boolean needsPropertyEntry(); + + /** Null-object class */ + class InvalidEntry implements IniEntry { + + private final File directory; + + // this should really use a logger, but oh well. + public InvalidEntry(File directory) { + this.directory = directory; + } + + @Override + public String getIniLine() { + System.out.println(String.format("Invalid user workspace entry in %s", directory)); + return ""; + } + + @Override + public String getPropertiesLine() { + return ""; + } + + @Override + public boolean needsPropertyEntry() { + return false; + } + + @Override + public String toString() { + return "\tInvalidEntry{\n" + "\t\tdirectory=" + directory + "\n\t}"; + } + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/config/ServiceEntry.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/config/ServiceEntry.java new file mode 100644 index 0000000..df068d9 --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/config/ServiceEntry.java @@ -0,0 +1,85 @@ +package org.jazzcommunity.development.library.config; + +import com.google.common.io.CharSource; +import com.google.common.io.Files; +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Stream; +import org.jazzcommunity.development.library.DetectOperatingSystem; + +class ServiceEntry implements IniEntry { + + private final File directory; + + public ServiceEntry(File directory) { + this.directory = directory; + } + + @Override + public String getIniLine() { + // TODO: duplicated code + String formatted = directory.getPath(); + + if (DetectOperatingSystem.isWindows()) { + formatted = formatted.replaceAll("\\\\", "/"); + formatted = formatted.replaceAll(":", "\\\\:"); + } + + return String.format("reference\\:file\\:%s/plugin@start", formatted); + } + + @Override + public String getPropertiesLine() { + File manifest = new File(directory, "plugin/META-INF/MANIFEST.MF"); + return read(manifest) + .filter(l -> l.startsWith("Bundle-SymbolicName")) + .findFirst() + .map(line -> String.format("%s=target/classes,target/dependencies", toSymbolicName(line))) + .orElseThrow( + () -> + new RuntimeException( + String.format( + "Missing Bundle-SymbolicName in %s. Malformed manifest", directory))); + } + + @Override + public boolean needsPropertyEntry() { + return true; + } + + // TODO: duplicate code, this is pretty much the same as in config reader + private Stream read(File manifest) { + CharSource source = Files.asCharSource(manifest, Charset.forName("UTF-8")); + + try { + return source.lines(); + } catch (IOException e) { + System.out.println( + String.format( + "Manifest file %s not found. Cannot load %s as jazz plugin.", manifest, directory)); + return Stream.empty(); + } + } + + @Override + public String toString() { + return "\tServiceEntry {\n" + + "\t\tdirectory = " + + directory + + "\n\t\tini line = " + + getIniLine() + + "\n\t\tproperties line = " + + getPropertiesLine() + + "\n\t}"; + } + + private static String toSymbolicName(String line) { + Pattern pattern = Pattern.compile("Bundle-SymbolicName:(.*);.*"); + Matcher matcher = pattern.matcher(line); + matcher.find(); + return matcher.group(1).trim(); + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/config/UiEntry.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/config/UiEntry.java new file mode 100644 index 0000000..2d05758 --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/config/UiEntry.java @@ -0,0 +1,47 @@ +package org.jazzcommunity.development.library.config; + +import java.io.File; +import org.jazzcommunity.development.library.DetectOperatingSystem; + +class UiEntry implements IniEntry { + + private final File directory; + + public UiEntry(File directory) { + this.directory = directory; + } + + @Override + public String getIniLine() { + // TODO: duplicated code + String formatted = directory.getPath(); + + if (DetectOperatingSystem.isWindows()) { + formatted = formatted.replaceAll("\\\\", "/"); + formatted = formatted.replaceAll(":", "\\\\:"); + } + + return String.format("reference\\:file\\:%s@start", formatted); + } + + @Override + public String getPropertiesLine() { + // UI plugins don't require an entry in the .properties file. + return ""; + } + + @Override + public boolean needsPropertyEntry() { + return false; + } + + @Override + public String toString() { + return "\tUiEntry {\n" + + "\t\tdirectory = " + + directory + + "\n\t\tini line = " + + getIniLine() + + "\n\t}"; + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/zip/SevenZip.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/zip/SevenZip.java new file mode 100644 index 0000000..8b30556 --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/zip/SevenZip.java @@ -0,0 +1,94 @@ +package org.jazzcommunity.development.library.zip; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Arrays; +import java.util.Objects; +import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry; +import org.apache.commons.compress.archivers.sevenz.SevenZFile; +import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile; +import org.jazzcommunity.development.library.FileTools; + +/** + * This is modelled after + * https://memorynotfound.com/java-7z-seven-zip-example-compress-decompress-file/ + */ +public class SevenZip { + + private static final int BUFFER_SIZE = 1 << 10; + + private SevenZip() {} + + public static void compress(String name, String[] filter, File... files) throws IOException { + try (SevenZOutputFile out = new SevenZOutputFile(FileTools.toAbsolute(name))) { + Arrays.stream(files).forEach(file -> toArchive(out, file, "", filter)); + } + } + + public static void compress(String name, File... files) throws IOException { + compress(name, new String[] {""}, files); + } + + public static void decompress(File file, File to) throws IOException { + // this needs some serious cleaning up + SevenZFile from = new SevenZFile(file); + SevenZArchiveEntry entry; + while ((entry = from.getNextEntry()) != null) { + if (entry.isDirectory()) { + continue; + } + + File current = new File(to, entry.getName()); + File parent = current.getParentFile(); + + if (!parent.exists()) { + parent.mkdirs(); + } + + FileOutputStream out = new FileOutputStream(current); + byte[] buffer = new byte[(int) entry.getSize()]; + from.read(buffer, 0, buffer.length); + out.write(buffer); + out.close(); + } + } + + private static void toArchive( + SevenZOutputFile out, File file, String directory, String[] filter) { + try { + final String name = + directory.equals("") + ? file.getName() + : String.format("%s%s%s", directory, File.separator, file.getName()); + + if (file.isFile()) { + SevenZArchiveEntry entry = out.createArchiveEntry(file, name); + out.putArchiveEntry(entry); + + // extract this to stream lib function + FileInputStream stream = new FileInputStream(file); + byte[] buffer = new byte[BUFFER_SIZE]; + int count; + while ((count = stream.read(buffer)) > 0) { + out.write(buffer, 0, count); + } + + out.closeArchiveEntry(); + // this next condition is super ugly, but will work for the current filtering + } else if (file.isDirectory() + && Arrays.stream(filter).noneMatch(f -> file.getName().equals(f))) { + Arrays.stream(Objects.requireNonNull(file.listFiles())) + .forEach(content -> toArchive(out, content, name, filter)); + } else { + // this could also occur when the file content is something weird, I guess a symlink + // would mess this up, for example. + System.out.println(String.format("Skipped %s because of backup mode", file.getName())); + } + } catch (Exception e) { + // not sure yet how and where to handle these properly + e.printStackTrace(); + } + } +} diff --git a/buildSrc/src/main/java/org/jazzcommunity/development/library/zip/Zip.java b/buildSrc/src/main/java/org/jazzcommunity/development/library/zip/Zip.java new file mode 100644 index 0000000..430ed38 --- /dev/null +++ b/buildSrc/src/main/java/org/jazzcommunity/development/library/zip/Zip.java @@ -0,0 +1,69 @@ +package org.jazzcommunity.development.library.zip; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +public class Zip { + + /** Largely taken from https://gist.github.com/cassiuscai/cec0c8e418ce265d4227fef56d874aa6 */ + private static final int BUFFER_SIZE = 1 << 12; + + public static void decompress(File source, File target) throws IOException { + decompress(source, target, ""); + } + + // this also needs refactoring badly... + public static void decompress(File source, File target, String subfolder) throws IOException { + ZipInputStream stream = + new ZipInputStream(new BufferedInputStream(new FileInputStream(source))); + + ZipEntry entry; + while ((entry = stream.getNextEntry()) != null) { + if (entry.getName().startsWith(subfolder)) { + // ok, this is really funky, but trust me. + String name = entry.getName().replace(subfolder, ""); + if (entry.isDirectory()) { + makeDirectories(target, name); + } else { + String directory = directoryPart(name); + if (directory != null) { + makeDirectories(target, directory); + } + extractFile(stream, target, name); + } + } + } + stream.close(); + } + + private static void makeDirectories(File dir, String path) { + File file = new File(dir, path); + if (!file.exists()) { + file.mkdirs(); + } + } + + private static String directoryPart(String name) { + int s = name.lastIndexOf(File.separatorChar); + return s == -1 ? null : name.substring(0, s); + } + + private static void extractFile(InputStream inputStream, File outDir, String name) + throws IOException { + int count = -1; + byte buffer[] = new byte[BUFFER_SIZE]; + BufferedOutputStream out = + new BufferedOutputStream(new FileOutputStream(new File(outDir, name)), BUFFER_SIZE); + while ((count = inputStream.read(buffer, 0, BUFFER_SIZE)) != -1) { + out.write(buffer, 0, count); + } + out.close(); + } +} diff --git a/click_launch.ps1 b/click_launch.ps1 deleted file mode 100644 index 4f5ccce..0000000 --- a/click_launch.ps1 +++ /dev/null @@ -1,6 +0,0 @@ -echo "Starting the Jazz Debug Environment... (this will likely take a couple of minutes, depending on your machine)" -echo "Navigate to 'https://localhost:7443/jazz' to access the application" - -& ((Split-Path $MyInvocation.InvocationName) + "\scripts\run_jetty.ps1") - -Read-Host -Prompt "For some reason, the jazz debug session did not start properly. Carefully read the entries above (if there are any) and consult the logs. Press Enter to Close this Window" diff --git a/conf/jetty/data/config.template b/conf/jetty/data/config.template deleted file mode 100644 index d9d701f..0000000 --- a/conf/jetty/data/config.template +++ /dev/null @@ -1,5 +0,0 @@ -osgi.bundles.defaultStartLevel=4 -osgi.install.area=sdk -osgi.framework=sdk/plugins/org.eclipse.osgi_3.10.2.v20150203-1939.jar -osgi.configuration.cascaded=false -osgi.bundles=reference\:file\:org.eclipse.equinox.simpleconfigurator_1.1.0.v20131217-1203.jar@1\:start \ No newline at end of file diff --git a/conf/jetty/data/dev.template b/conf/jetty/data/dev.template deleted file mode 100644 index ebe7d45..0000000 --- a/conf/jetty/data/dev.template +++ /dev/null @@ -1 +0,0 @@ -@ignoredot@=true diff --git a/conf/jetty/user_configs/.gitignore b/conf/jetty/user_configs/.gitignore deleted file mode 100644 index 8bb1a2c..0000000 --- a/conf/jetty/user_configs/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore user specified workspace cfg. -my_workspaces.cfg -my.properties diff --git a/conf/jetty/user_configs/template.properties b/conf/jetty/user_configs/template.properties deleted file mode 100644 index 411c54a..0000000 --- a/conf/jetty/user_configs/template.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Name spaces must be resolved by their relative path inside the -# defined target directory. - -# Assuming you have a workspace in your user_workspaces.cfg that resolves -# to a folder called 'com.me.project', you have to define the subfolder in -# which compiled class files are located. - -# A proper definition could look like this: -# Assuming you have this project defined in your workspaces.cfg -# C\:/myworkspace/com.me.project@start -# Further, assuming you compile to a folder called 'bin', you would have -# to define the class location here like this: -# com.me.project=bin diff --git a/conf/jetty/user_configs/user_workspaces_template.cfg b/conf/jetty/user_configs/user_workspaces_template.cfg deleted file mode 100644 index 243600f..0000000 --- a/conf/jetty/user_configs/user_workspaces_template.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# List of java workspaces that are supposed to be live-deployed during a -# debugging session. Do not forget to add the @start tag, which is required -# for non-packaged class-based deployments. It's easiest to use absolute -# paths for these paths, because you remain flexible with the location of -# the entire package. However, when using absolut paths under windows, make -# sure to use the proper java path syntax with escaped colons. - -# Example: a workspace on drive D needs to look like this: -# D\:/some_folder/workspace_folder@start -# The colon after the drive letter needs to be escaped, and all path -# fragments need to be separated by unix-style forward slashes. diff --git a/db/.gitignore b/db/.gitignore deleted file mode 100644 index 2c8aba9..0000000 --- a/db/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore all files in this folder. -* -!.gitignore \ No newline at end of file diff --git a/docs/images/add_before_launch.png b/docs/images/add_before_launch.png deleted file mode 100644 index 9d92cf5..0000000 Binary files a/docs/images/add_before_launch.png and /dev/null differ diff --git a/docs/images/completed_debug_configuration.png b/docs/images/completed_debug_configuration.png deleted file mode 100644 index 720a169..0000000 Binary files a/docs/images/completed_debug_configuration.png and /dev/null differ diff --git a/docs/images/debugging-services.png b/docs/images/debugging-services.png deleted file mode 100644 index fa2acab..0000000 Binary files a/docs/images/debugging-services.png and /dev/null differ diff --git a/docs/images/start_jetty_config.png b/docs/images/start_jetty_config.png deleted file mode 100644 index ef4541e..0000000 Binary files a/docs/images/start_jetty_config.png and /dev/null differ diff --git a/docs/images/stop_jetty_config.png b/docs/images/stop_jetty_config.png deleted file mode 100644 index 587bf3b..0000000 Binary files a/docs/images/stop_jetty_config.png and /dev/null differ diff --git a/gradle/wrapper/gradle-4.2.1-bin.zip b/gradle/wrapper/gradle-4.2.1-bin.zip deleted file mode 100644 index be694d1..0000000 Binary files a/gradle/wrapper/gradle-4.2.1-bin.zip and /dev/null differ diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index ed88a04..29953ea 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2948e4d..6a20c4c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Oct 06 11:30:38 CEST 2017 +#Fri Sep 28 19:11:19 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=gradle-4.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip diff --git a/jre/.gitignore b/jre/.gitignore deleted file mode 100644 index 2c8aba9..0000000 --- a/jre/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore all files in this folder. -* -!.gitignore \ No newline at end of file diff --git a/scripts/async_debug_launch.bat b/scripts/async_debug_launch.bat deleted file mode 100644 index cfa8907..0000000 --- a/scripts/async_debug_launch.bat +++ /dev/null @@ -1,8 +0,0 @@ -@echo off -@start powershell.exe -file %1 - -:: Ugly hack has to be used instead of the built-in timeout command because -:: IntelliJ, for reasons, doesn't allow the timeout command in external -:: tools. - -ping 127.0.0.1 -n 10 > NUL diff --git a/scripts/clean.ps1 b/scripts/clean.ps1 deleted file mode 100644 index ddc7c81..0000000 --- a/scripts/clean.ps1 +++ /dev/null @@ -1,5 +0,0 @@ -rm -r .\workspace -ea ig -rm -r .\conf\jetty\p2 -ea ig -rm -r .\conf\jetty\gen\org* -ea ig -rm -r .\conf\jetty\gen\com* -ea ig -rm derby.log -ea ig diff --git a/scripts/clean.sh b/scripts/clean.sh deleted file mode 100644 index dcd4176..0000000 --- a/scripts/clean.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -rm -rf workspace/ -rm -rf conf/jetty/gen/org* -rm -rf conf/jetty/gen/com* -rm -f derby.log diff --git a/scripts/generate_jetty_config.ps1 b/scripts/generate_jetty_config.ps1 deleted file mode 100644 index 580896f..0000000 --- a/scripts/generate_jetty_config.ps1 +++ /dev/null @@ -1,108 +0,0 @@ -function formatJars($config) { - $result = "" - - foreach ($line in $config) { - if (![String]::IsNullOrEmpty($line) -and !$line.StartsWith("#")) { - $result += "reference\:file\:$line," - } - } - - return $result -} - -function encode($outFile, $tempFile) { - $encoding = New-Object System.Text.ASCIIEncoding - $tempFile = Get-Content $tempFile - [System.IO.File]::WriteAllLines($outFile, $tempFile, $encoding) -} - -function createConfig($tempFile) { - # write a header with creation time stamp - $timestamp = getTimeStamp - echo "# generated configuration file $timestamp" >> $tempFile - - # copy template input - Get-Content data/config.template >> $tempFile - - # these files need to be added to the osgi bundles variable in - # the config.ini file. - $userConfigs = Get-ChildItem "user_configs\*.cfg" - - $osgiOutput = "osgi.bundles=" - - foreach ($configFile in $userConfigs) { - $content = Get-Content $configFile - $osgiOutput += formatJars $content - } - - # remove the last character because it's a comma - $osgiOutput = $osgiOutput -replace ".{1}$" - - echo $osgiOutput >> $tempFile -} - -function getTimeStamp { - return [DateTime]::Now.ToString('dd-MM-yy HH:mm:ss') -} - -function mergeProperties($tempFile) { - $timestamp = getTimeStamp - echo "# generated properties file $timestamp" >> $tempFile - - # write template to output - Get-Content data/dev.template >> $tempFile - - $files = @(Get-ChildItem user_configs/ -Filter *.properties) - - foreach ($file in $files) { - $content = Get-Content user_configs/$file - - foreach ($line in $content) { - if (![String]::IsNullOrEmpty($line) -and !$line.StartsWith("#")) { - echo $line >> $tempFile - } - } - } -} - -function listSdkPlugins() { - $pluginPath = "../../sdk/plugins" - - ls -Directory -Name $pluginPath | % { - if ($_ -notlike "*.source_*") { - echo $_"/@start" - } - } > gen/sdk_files_gen.cfg - - ls -File -Name $pluginPath | % { - if ($_ -notlike "*.source_*") { - echo $_"@start" - } - } >> gen/sdk_files_gen.cfg - -} - -# remove previous files or create folder -if (Test-Path gen) { - rm -r gen/* -} else { - New-Item gen -type directory >$null 2>&1 -} - -# generate sdk_files.cfg from current sdk -listSdkPlugins - -# create empty files -$tempFile = New-Item gen/config.temp -type file -$outFile = New-Item gen/config.ini -type file - -$tempProps = New-Item gen/dev.temp -type file -$devProps = New-Item gen/dev.properties -type file - -createConfig $tempFile -mergeProperties $tempProps - -# fix encoding problems. If files aren't encoded this way, -# java processes will not be able to read them as configs. -encode $outFile $tempFile -encode $devProps $tempProps diff --git a/scripts/generate_jetty_config.sh b/scripts/generate_jetty_config.sh deleted file mode 100644 index 0cb1ac5..0000000 --- a/scripts/generate_jetty_config.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -# generate sdk_files.cfg -# rm -f user_configs/sdk_files.cfg -# -# for dir in ../../sdk/plugins/*/; do -# echo $(basename $dir)"/@start" >> user_configs/sdk_files.cfg -# done -# -# for file in ../../sdk/plugins/*.jar; do -# echo $(basename $file)"@start" >> user_configs/sdk_files.cfg -# done - -# clear gen folder -rm -rf gen/* - -# copy config template to gen -cp data/config.template gen/config.ini - -# fix encoding issues -dos2unix user_configs/*.cfg -dos2unix user_configs/*.properties - -# add reference string, trunc onto line, prepend with osgi.bundles -# and remove trailing comma -grep -ah "^[^#]" user_configs/*.cfg \ - | sed 's/\(.*\)/reference\\:file\\:\1/' \ - | tr -d '\r' \ - | tr '\n' ',' \ - | sed 's/^/\nosgi.bundles=/' \ - | sed 's/,$//' \ - >> gen/config.ini - -# merge .config user files into a single configuration -grep -ah "^[^#]" user_configs/*.properties > gen/dev.properties diff --git a/scripts/stop_jetty.bat b/scripts/stop_jetty.bat deleted file mode 100644 index 0cfa19d..0000000 --- a/scripts/stop_jetty.bat +++ /dev/null @@ -1 +0,0 @@ -wmic Path win32_process Where "CommandLine Like '%%jazz_debug_environment%%java.exe%%'" Call Terminate diff --git a/scripts/stop_jetty.sh b/scripts/stop_jetty.sh deleted file mode 100644 index 1a88228..0000000 --- a/scripts/stop_jetty.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -kill $(ps -C java -o pid,command | grep jazz | cut -d ' ' -f 2) diff --git a/sdk/.gitignore b/sdk/.gitignore deleted file mode 100644 index 2c8aba9..0000000 --- a/sdk/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore all files in this folder. -* -!.gitignore \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..7d58322 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,18 @@ +/* + * This settings file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * In a single project build this file can be empty or even removed. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user guide at https://docs.gradle.org/3.4.1/userguide/multi_project_builds.html + */ + +/* +// To declare projects as part of a multi-project build use the 'include' method +include 'shared' +include 'api' +include 'services:webservice' +*/ + +rootProject.name = 'jazz-debug-environment-2' diff --git a/conf/jazz/log4j.properties b/tool/configs/6.0.3/log4j.properties similarity index 100% rename from conf/jazz/log4j.properties rename to tool/configs/6.0.3/log4j.properties diff --git a/conf/jazz/scr.xml b/tool/configs/6.0.3/scr.xml similarity index 100% rename from conf/jazz/scr.xml rename to tool/configs/6.0.3/scr.xml diff --git a/conf/jazz/services.xml b/tool/configs/6.0.3/services.xml similarity index 100% rename from conf/jazz/services.xml rename to tool/configs/6.0.3/services.xml diff --git a/conf/jazz/teamserver.properties b/tool/configs/6.0.3/teamserver.properties similarity index 99% rename from conf/jazz/teamserver.properties rename to tool/configs/6.0.3/teamserver.properties index 9a85e5c..78fdd94 100644 --- a/conf/jazz/teamserver.properties +++ b/tool/configs/6.0.3/teamserver.properties @@ -8,7 +8,3 @@ ############################################################################### # Properties file for configuring IBM Team Server com.ibm.team.repository.db.repoLockId.skipCheck=true - - - - diff --git a/tool/configs/6.0.6/log4j.properties b/tool/configs/6.0.6/log4j.properties new file mode 100644 index 0000000..a441384 --- /dev/null +++ b/tool/configs/6.0.6/log4j.properties @@ -0,0 +1,17 @@ +############################################################################### +# Licensed Materials - Property of IBM +# (c) Copyright IBM Corporation 2011. All Rights Reserved. +# +# Note to U.S. Government Users Restricted Rights: +# Use, duplication or disclosure restricted by GSA ADP Schedule +# Contract with IBM Corp. +############################################################################### +# Log4j properties file for RTC Extensions workshop Jetty launches +# Default logging is for WARN and higher to stdout +log4j.rootLogger=WARN, stdout +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} [%t] %5p %-50.50c - %m%n +log4j.logger.com.hp.hpl.jena=OFF +log4j.logger.org.openjena=OFF +log4j.logger.com.ibm.team.jfs=INFO diff --git a/tool/configs/6.0.6/scr.xml b/tool/configs/6.0.6/scr.xml new file mode 100644 index 0000000..7af4bd6 --- /dev/null +++ b/tool/configs/6.0.6/scr.xml @@ -0,0 +1,214 @@ + + + + + + + + + %server-URL% + + + + http://open-services.net/ns/cm# + + %jsa-sso-enabled% + + + + + + + + + + + + + %server-URL% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %server-URL% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + TRS 1.0 for RTC Resources + TRS 1.0 feed for RTC resources + + + + + + + + + TRS 2.0 for RTC Resources + TRS 2.0 feed for RTC resources + + + + + + + + + TRS 2.0 for RTC Process Resources + TRS 2.0 feed for process resources in RTC + + + + + + + + TRS 2.0 for RTC SCM Resources + TRS 2.0 feed for SCM resources in RTC + + + + + + TRS 2.0 for RTC SCM Link Resources + TRS 2.0 feed for SCM link resources in RTC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tool/configs/6.0.6/services.xml b/tool/configs/6.0.6/services.xml new file mode 100644 index 0000000..8259148 --- /dev/null +++ b/tool/configs/6.0.6/services.xml @@ -0,0 +1,290 @@ + + + + + + + + + + Change and Configuration Management + + + + + + + + + + + + + + + %jsa-sso-enabled% + + + + + + %realm-name% + %server-URL% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TRS 1.0 for RTC Resources + TRS 1.0 feed for RTC resources + + + + + + + + + + + TRS 2.0 for RTC Resources + TRS 2.0 feed for RTC resources + + + + + + + + + + + TRS 2.0 for RTC Process Resources + TRS 2.0 feed for process resources in RTC + + + + + + + + + + TRS 2.0 for RTC SCM Resources + TRS 2.0 feed for SCM resources in RTC + + + + + + + + TRS 2.0 for RTC SCM Link Resources + TRS 2.0 feed for SCM link resources in RTC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tool/configs/6.0.6/teamserver.properties b/tool/configs/6.0.6/teamserver.properties new file mode 100644 index 0000000..78fdd94 --- /dev/null +++ b/tool/configs/6.0.6/teamserver.properties @@ -0,0 +1,10 @@ +############################################################################### +# Licensed Materials - Property of IBM +# (c) Copyright IBM Corporation 2005, 2010. All Rights Reserved. +# +# Note to U.S. Government Users Restricted Rights: +# Use, duplication or disclosure restricted by GSA ADP Schedule +# Contract with IBM Corp. +############################################################################### +# Properties file for configuring IBM Team Server +com.ibm.team.repository.db.repoLockId.skipCheck=true diff --git a/db_presets/603_db.zip b/tool/db_presets/6.0.3_db.zip similarity index 100% rename from db_presets/603_db.zip rename to tool/db_presets/6.0.3_db.zip diff --git a/tool/db_presets/6.0.6_db.zip b/tool/db_presets/6.0.6_db.zip new file mode 100644 index 0000000..fe764fa Binary files /dev/null and b/tool/db_presets/6.0.6_db.zip differ diff --git a/scripts/run_jetty.sh b/tool/scripts/run_jetty_bash.twig similarity index 69% rename from scripts/run_jetty.sh rename to tool/scripts/run_jetty_bash.twig index 9da3eb4..86f015a 100644 --- a/scripts/run_jetty.sh +++ b/tool/scripts/run_jetty_bash.twig @@ -1,13 +1,14 @@ +#!/usr/bin/env bash "jre/bin/java" \ -Xdebug "-agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=n" \ --Xmx512M \ +-Xmx1024M \ -XX:PermSize=64M \ -XX:MaxPermSize=256M \ -"-Dlog4j.configuration=file:conf/jazz/log4j.properties" \ +"-Dlog4j.configuration=file:conf/log4j.properties" \ "-Dcom.ibm.team.repository.web.homeuri=http://www.jazz.net" \ -"Dcom.ibm.team.repository.web.helpuri=http://publib.boulder.ibm.com/infocenter/clmhelp/v4r0/index.jsp" \ -"-Dcom.ibm.team.repository.discovery.document.location=file:conf/jazz/services.xml" \ -"-Dcom.ibm.team.repository.scr.document.location=file:conf/jazz/scr.xml" \ +"-Dcom.ibm.team.repository.discovery.document.location=file:conf/services.xml" \ +"-Dcom.ibm.team.repository.scr.document.location=file:conf/scr.xml" \ "-Dcom.ibm.team.repository.ws.allow.identity.assertion=false" \ "-Dorg.mortbay.log.LogFactory.noDiscovery=true" \ "-Dorg.eclipse.equinox.servlet.bridge.enabled=true" \ @@ -16,7 +17,7 @@ "-Dosgi.noShutdown=true" \ "-Dosgi.compatibility.bootdelegation=false" \ "-Dorg.osgi.framework.bootdelegation=sun.*,com.ms.*,com.ibm.*,com.sun.*,org.w3c.*,org.xml.*,javax.*" \ -"-Dcom.ibm.team.server.configURL=file:conf/jazz/teamserver.properties" \ +"-Dcom.ibm.team.server.configURL=file:conf/teamserver.properties" \ "-Dcom.ibm.team.repository.server.webapp.url=https://localhost:7443/jazz" \ "-Dcom.ibm.team.scm.enable.distributed=true" \ "-Dcom.ibm.team.repository.server.mode=STANDALONE" \ @@ -25,9 +26,9 @@ "-Dcom.ibm.team.fulltext.indexLocation=db/conf/jazz/indices/workitemindex" \ "-Djetty.http.port=7080" \ "-Djetty.https.port=7443" \ -"-Duser.language=en" \ -"-Dcom.siemens.bt.jazz.services.cqrest.cqrooturi=https://bt-clearquest.hqs.sbt.siemens.com/cqweb/oslc/" \ +"-Duser.language=en" \{% if (parameters != null) %}{% for parameter in parameters %} +"-D{{ parameter }}" \{% endfor %}{% endif %} "-Dfile.encoding=UTF-8" \ --classpath sdk/plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar org.eclipse.equinox.launcher.Main \ --dev "file:conf/jetty/gen/dev.properties" \ --configuration "file:conf/jetty/gen" +-classpath {{ launcher }} org.eclipse.equinox.launcher.Main \ +-dev "file:conf/dev.properties" \ +-configuration "file:conf/" diff --git a/scripts/run_jetty.ps1 b/tool/scripts/run_jetty_powershell.twig similarity index 70% rename from scripts/run_jetty.ps1 rename to tool/scripts/run_jetty_powershell.twig index c1507b0..0842197 100644 --- a/scripts/run_jetty.ps1 +++ b/tool/scripts/run_jetty_powershell.twig @@ -1,13 +1,13 @@ & "jre\bin\java.exe" ` -Xdebug "-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:9999,server=y,suspend=n" ` --Xmx512M ` +-Xmx1024M ` -XX:PermSize=64M ` -XX:MaxPermSize=256M ` -"-Dlog4j.configuration=file:conf/jazz/log4j.properties" ` +"-Dlog4j.configuration=file:conf/log4j.properties" ` "-Dcom.ibm.team.repository.web.homeuri=http://www.jazz.net" ` -"Dcom.ibm.team.repository.web.helpuri=http://publib.boulder.ibm.com/infocenter/clmhelp/v4r0/index.jsp" ` -"-Dcom.ibm.team.repository.discovery.document.location=file:conf/jazz/services.xml" ` -"-Dcom.ibm.team.repository.scr.document.location=file:conf/jazz/scr.xml" ` +"-Dcom.ibm.team.repository.discovery.document.location=file:conf/services.xml" ` +"-Dcom.ibm.team.repository.scr.document.location=file:conf/scr.xml" ` "-Dcom.ibm.team.repository.ws.allow.identity.assertion=false" ` "-Dorg.mortbay.log.LogFactory.noDiscovery=true" ` "-Dorg.eclipse.equinox.servlet.bridge.enabled=true" ` @@ -16,7 +16,7 @@ "-Dosgi.noShutdown=true" ` "-Dosgi.compatibility.bootdelegation=false" ` "-Dorg.osgi.framework.bootdelegation=sun.*,com.ms.*,com.ibm.*,com.sun.*,org.w3c.*,org.xml.*,javax.*" ` -"-Dcom.ibm.team.server.configURL=file:conf/jazz/teamserver.properties" ` +"-Dcom.ibm.team.server.configURL=file:conf/teamserver.properties" ` "-Dcom.ibm.team.repository.server.webapp.url=https://localhost:7443/jazz" ` "-Dcom.ibm.team.scm.enable.distributed=true" ` "-Dcom.ibm.team.repository.server.mode=STANDALONE" ` @@ -25,9 +25,9 @@ "-Dcom.ibm.team.fulltext.indexLocation=db/conf/jazz/indices/workitemindex" ` "-Djetty.http.port=7080" ` "-Djetty.https.port=7443" ` -"-Duser.language=en" ` -"-Dcom.siemens.bt.jazz.services.cqrest.cqrooturi=https://bt-clearquest.hqs.sbt.siemens.com/cqweb/oslc/" ` +"-Duser.language=en" `{% if (parameters != null) %}{% for parameter in parameters %} + "-D{{ parameter }}" `{% endfor %}{% endif %} "-Dfile.encoding=UTF-8" ` --classpath sdk\plugins\org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar org.eclipse.equinox.launcher.Main ` --dev "file:conf/jetty/gen/dev.properties" ` --configuration "file:conf/jetty/gen" +-classpath {{ launcher }} org.eclipse.equinox.launcher.Main ` +-dev "file:conf/dev.properties" ` +-configuration "file:conf/" diff --git a/conf/jetty/user_configs/sdk_files.cfg b/tool/sdk_files/sdk_files_6.0.3.cfg similarity index 100% rename from conf/jetty/user_configs/sdk_files.cfg rename to tool/sdk_files/sdk_files_6.0.3.cfg diff --git a/tool/sdk_files/sdk_files_6.0.6.cfg b/tool/sdk_files/sdk_files_6.0.6.cfg new file mode 100644 index 0000000..edc712d --- /dev/null +++ b/tool/sdk_files/sdk_files_6.0.6.cfg @@ -0,0 +1,606 @@ +com.google.caja.sanitizer_1.0.0.v20180222_1729/@start +com.google.common_18.0.0.v20171016_2226/@start +com.google.gson_2.2.4.v20170102_1506.jar@start +com.google.javascript.jscomp_1.0.0.v20180306_1516/@start +com.hp.hpl.jena_2.7.4.v20171016_2226/@start +com.hp.hpl.jena.rdf_2.7.2000.v20171016_2226/@start +com.ibm.icu_52.1.1.v201501240615.jar@start +com.ibm.rational.buildforge.buildagent.common_3.0.1200.v20180410_0037.jar@start +com.ibm.rational.buildforge.buildagent.service_3.1.1500.v20180410_0218.jar@start +com.ibm.rational.buildforge.services.client.java_7.1.1.4020168.jar@start +com.ibm.rational.connector.buildforge.common_3.0.1100.v20180410_0037.jar@start +com.ibm.rational.connector.buildforge.service_3.1.1800.v20180402_2144.jar@start +com.ibm.rational.connector.hudson.common_1.1.200.v20180410_0037.jar@start +com.ibm.rational.connector.hudson.service_1.1.100.v20180402_2144.jar@start +com.ibm.rational.dataservices.adaptors.common_1.0.200.v20180503_1638.jar@start +com.ibm.rational.dataservices.client_2.1.300.v20180503_1638.jar@start +com.ibm.rational.dataservices.core_1.0.200.v20180503_1638.jar@start +com.ibm.rational.drivers.jdbc.xml_1.2.400.v20180503_1638.jar@start +com.ibm.rational.etl.common_2.0.500.v20180503_1638.jar@start +com.ibm.rational.etl.data_2.0.500.v20180503_1638.jar@start +com.ibm.rational.etl.database_1.2.200.v20180503_1638.jar@start +com.ibm.rational.etl.dataextraction_1.3.0.v20180503_1638.jar@start +com.ibm.rational.rrdg.core_6.0.5.v20180424_1904.jar@start +com.ibm.rational.rrdg.core.doors_6.0.5.v20170922_1947.jar@start +com.ibm.rational.rrdg.lib_6.0.5.v20180322_1904.jar@start +com.ibm.rational.rrdi.common.logging_1.1.400.v20180503_1638.jar@start +com.ibm.rational.rrdi.etl.rif2irifconverter_1.1.300.v20180503_1638.jar@start +com.ibm.rational.transformation.common_6.0.5.v20170922_1947.jar@start +com.ibm.rational.transformation.r2xml_6.0.5.v20170922_1947.jar@start +com.ibm.rational.transformation.x2rml_6.0.5.v20170922_1947.jar@start +com.ibm.sistdase.json_1.1.4000.v20171113_1937.jar@start +com.ibm.team.app.web_2.2.3000.v20171113_1937.jar@start +com.ibm.team.application.contribution_1.0.0.v20170329_1756.jar@start +com.ibm.team.apt.api.client_3.0.1500.v20180314_0033.jar@start +com.ibm.team.apt.api.common_3.0.1700.v20180314_0033.jar@start +com.ibm.team.apt.api.ui_3.0.1200.v20170613_0129.jar@start +com.ibm.team.apt.common_3.0.1900.v20180328_0041.jar@start +com.ibm.team.apt.sample.money_3.0.700.v20161206_2005.jar@start +com.ibm.team.apt.service_3.1.1800.v20180505_0159.jar@start +com.ibm.team.apt.shared.client_3.0.1900.v20180420_2347.jar@start +com.ibm.team.apt.shared.ui_3.0.1900.v20180406_1742.jar@start +com.ibm.team.apt.viewlets.service_3.0.600.v20161206_2005.jar@start +com.ibm.team.apt.viewlets.web_3.0.600.v20161206_2005/@start +com.ibm.team.apt.web.client_3.0.1900.v20180508_0039/@start +com.ibm.team.apt.web.client.core_3.0.800.v20170420_2036/@start +com.ibm.team.apt.web.common.core_3.0.700.v20161206_2005/@start +com.ibm.team.apt.web.process_1.1.200.v20180314_0203/@start +com.ibm.team.apt.web.ui_3.0.1900.v20180516_2231/@start +com.ibm.team.apt.web.ui.core_3.0.500.v20161206_2005/@start +com.ibm.team.build.common_3.1.1700.v20180504_0035.jar@start +com.ibm.team.build.extensions.common_1.1.200.v20180504_0035.jar@start +com.ibm.team.build.sample.money_3.0.800.v20161206_2005.jar@start +com.ibm.team.build.service_3.1.1700.v20180426_0207.jar@start +com.ibm.team.build.service.notification_3.0.1200.v20161206_2005.jar@start +com.ibm.team.build.viewlets.web_3.0.800.v20161206_2005/@start +com.ibm.team.build.web_3.1.1700.v20180505_0159/@start +com.ibm.team.calm.foundation.common_3.1.1600.v20180510_0007.jar@start +com.ibm.team.calm.foundation.sample.money_3.1.900.v20161206_2005.jar@start +com.ibm.team.calm.foundation.sample.service_3.1.600.v20161206_2005.jar@start +com.ibm.team.calm.foundation.server_3.1.1200.v20180426_0207.jar@start +com.ibm.team.calm.foundation.web_3.1.1700.v20180405_2057.jar@start +com.ibm.team.clm.upgrade.scripts_1.1.4000.v20171113_1937.jar@start +com.ibm.team.configuration.web_1.0.3000.v20180516_0132.jar@start +com.ibm.team.connector.ccbridge.common_3.0.900.v20170613_0129.jar@start +com.ibm.team.connector.scm.common_3.1.500.v20170613_0129.jar@start +com.ibm.team.connector.scm.service_3.0.400.v20161206_2005.jar@start +com.ibm.team.dashboard.common_6.0.3000.v20171113_1731.jar@start +com.ibm.team.dashboard.service_6.0.3000.v20180516_0132.jar@start +com.ibm.team.dashboard.viewlets.service_6.0.2000.v20180131_0131.jar@start +com.ibm.team.dashboard.viewlets.web_6.0.3000.v20180423_1647/@start +com.ibm.team.dashboard.web_6.0.3000.v20180330_0051.jar@start +com.ibm.team.datawarehouse.common_2.2.3000.v20171113_1731.jar@start +com.ibm.team.datawarehouse.service_2.2.4000.v20180507_1624.jar@start +com.ibm.team.datawarehouse.service.apt_3.1.1200.v20161206_2005.jar@start +com.ibm.team.datawarehouse.service.build_3.1.700.v20161206_2005.jar@start +com.ibm.team.datawarehouse.service.db2_3.1.4000.v20180507_1624.jar@start +com.ibm.team.datawarehouse.service.db2i_3.1.4000.v20180507_1624.jar@start +com.ibm.team.datawarehouse.service.db2z_3.1.4000.v20180507_1624.jar@start +com.ibm.team.datawarehouse.service.derby_3.1.4000.v20180507_1624.jar@start +com.ibm.team.datawarehouse.service.oracle_3.1.4000.v20180508_2352.jar@start +com.ibm.team.datawarehouse.service.repository_2.2.3000.v20171113_1937.jar@start +com.ibm.team.datawarehouse.service.scm_3.1.1100.v20170328_0148.jar@start +com.ibm.team.datawarehouse.service.setup_3.0.3000.v20171113_1937.jar@start +com.ibm.team.datawarehouse.service.sqlserver_3.1.4000.v20180507_1624.jar@start +com.ibm.team.datawarehouse.service.starjobs_3.1.3000.v20171113_1937.jar@start +com.ibm.team.datawarehouse.service.workitem_3.1.1400.v20170325_0128.jar@start +com.ibm.team.dependencyboard_1.0.0.v20180505_0159.jar@start +com.ibm.team.dependencyboard.common_1.0.0.v20180508_0039.jar@start +com.ibm.team.dependencyboard.server_1.0.0.v20180403_2108.jar@start +com.ibm.team.dependencyboard.service_1.0.0.v20180508_0039.jar@start +com.ibm.team.dependencyboard.transport_1.0.0.v20180508_0039.jar@start +com.ibm.team.dev.jdojo.runtime.common_3.0.1100.v20170613_0129.jar@start +com.ibm.team.dev.jdojo.runtime.java_3.0.1000.v20170613_0129.jar@start +com.ibm.team.dev.jdojo.runtime.script_3.0.1700.v20180507_1624.jar@start +com.ibm.team.dev.jdojo.runtime.web_3.0.1700.v20180314_0033.jar@start +com.ibm.team.dev.jdojox_3.0.1400.v20170613_0129.jar@start +com.ibm.team.examples.reports.common_3.1.1600.v20180326_1550/@start +com.ibm.team.filesystem.common_3.2.1100.v20180330_0051.jar@start +com.ibm.team.filesystem.common.workitems_3.1.1200.v20170824_1555.jar@start +com.ibm.team.filesystem.reviews.common_1.1.200.v20180314_0033.jar@start +com.ibm.team.filesystem.reviews.service_1.1.200.v20180314_0203.jar@start +com.ibm.team.filesystem.reviews.service.web_1.1.200.v20180314_0203.jar@start +com.ibm.team.filesystem.service_3.2.1100.v20180408_1635/@start +com.ibm.team.filesystem.service.sample_3.1.1100.v20170728_0324.jar@start +com.ibm.team.filesystem.service.workitems_3.1.1100.v20180408_1635.jar@start +com.ibm.team.foundation.common_1.3.4000.v20180303_0135.jar@start +com.ibm.team.foundation.documentation_1.0.1000.v20171113_1748.jar@start +com.ibm.team.foundation.service_1.1.3000.v20171113_1937.jar@start +com.ibm.team.fulltext.common_1.2.3000.v20180424_1643.jar@start +com.ibm.team.fulltext.service_1.2.4000.v20171018_1727.jar@start +com.ibm.team.gateway.service_1.1.3000.v20171113_1937.jar@start +com.ibm.team.gc.sdk.common_6.0.3000.v20180416_1651.jar@start +com.ibm.team.gc.sdk.model_1.0.0.v20180323_1649.jar@start +com.ibm.team.gc.sdk.service_6.0.2000.v20180502_2347.jar@start +com.ibm.team.gc.sdk.web.resources_1.0.3000.v20180411_1751.jar@start +com.ibm.team.git.common_1.2.200.v20180314_0203.jar@start +com.ibm.team.git.service_1.1.200.v20180527_0109.jar@start +com.ibm.team.git.web_1.1.200.v20180402_2144.jar@start +com.ibm.team.http_1.1.3000.v20171113_1748.jar@start +com.ibm.team.http.client.impl_1.1.3000.v20171113_1748.jar@start +com.ibm.team.http.client.impl.nl1_1.1.2.v201505131347.jar@start +com.ibm.team.http.client.impl.nl2_1.1.1.v201109280231.jar@start +com.ibm.team.http.client.impl.nl2a_1.1.1.v201109280231.jar@start +com.ibm.team.interop.client.rest_3.0.900.v20170613_0129.jar@start +com.ibm.team.interop.common_3.0.1200.v20170613_0129.jar@start +com.ibm.team.interop.service_3.0.1200.v20161206_2005.jar@start +com.ibm.team.interop.service.managers.clearquest_3.0.1200.v20161206_2005.jar@start +com.ibm.team.interop.service.managers.clearquest.common_3.0.1100.v20170613_0129.jar@start +com.ibm.team.interop.service.managers.kernel_3.0.500.v20161206_2005.jar@start +com.ibm.team.interop.service.managers.workitem_3.0.1000.v20161206_2005.jar@start +com.ibm.team.jazz.foundation.server_3.1.4000.v20180517_2109.jar@start +com.ibm.team.jfs.app_1.3.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.auth_1.1.4000.v20171113_1748.jar@start +com.ibm.team.jfs.app.auth.nl1_1.0.4.v201505131347.jar@start +com.ibm.team.jfs.app.auth.nl2_1.0.1.v201211071548.jar@start +com.ibm.team.jfs.app.auth.nl2a_1.0.3.v201307311205.jar@start +com.ibm.team.jfs.app.automation_3.0.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.cache_1.1.4000.v20171113_1748.jar@start +com.ibm.team.jfs.app.cache.provider.memcached_1.1.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.cache.provider.memcached.nl1_1.1.1.v201109280231.jar@start +com.ibm.team.jfs.app.cache.provider.memcached.nl2_1.1.1.v201109280231.jar@start +com.ibm.team.jfs.app.cache.provider.memcached.nl2a_1.1.1.v201109280231.jar@start +com.ibm.team.jfs.app.config_1.1.4000.v20180424_1655.jar@start +com.ibm.team.jfs.app.config.nl1_1.1.2.v201603161349.jar@start +com.ibm.team.jfs.app.config.nl2_1.1.2.v201603161347.jar@start +com.ibm.team.jfs.app.config.nl2a_1.1.2.v201603161351.jar@start +com.ibm.team.jfs.app.discovery_1.2.4000.v20171113_1748.jar@start +com.ibm.team.jfs.app.distributed_2.3.2000.v20180506_1631.jar@start +com.ibm.team.jfs.app.distributed.nl1_2.3.1004.v201805161731.jar@start +com.ibm.team.jfs.app.distributed.nl2_2.3.1004.v201805161729.jar@start +com.ibm.team.jfs.app.distributed.nl2a_2.3.1004.v201805161733.jar@start +com.ibm.team.jfs.app.error_1.1.5000.v20171113_1748.jar@start +com.ibm.team.jfs.app.friendsconfig_1.4.4000.v20171018_1727.jar@start +com.ibm.team.jfs.app.http_1.4.4000.v20171113_1748.jar@start +com.ibm.team.jfs.app.http.cache_1.1.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.http.client_1.2.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.http.client.nl1_1.1.3.v201307311205.jar@start +com.ibm.team.jfs.app.http.client.nl2_1.1.2.v201205171340.jar@start +com.ibm.team.jfs.app.http.client.nl2a_1.1.3.v201307311205.jar@start +com.ibm.team.jfs.app.http.nl1_1.4.1000.v201505131347.jar@start +com.ibm.team.jfs.app.http.nl2_1.4.1000.v201505131345.jar@start +com.ibm.team.jfs.app.http.nl2a_1.4.1000.v201505131349.jar@start +com.ibm.team.jfs.app.memcached_1.1.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.memcached.nl1_1.1.1.v201109280231.jar@start +com.ibm.team.jfs.app.memcached.nl2_1.1.1.v201109280231.jar@start +com.ibm.team.jfs.app.memcached.nl2a_1.1.1.v201109280231.jar@start +com.ibm.team.jfs.app.migration_1.2.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.migration.nl1_1.1.204.v201505131347.jar@start +com.ibm.team.jfs.app.migration.nl2_1.1.200.v201305071650.jar@start +com.ibm.team.jfs.app.migration.nl2a_1.1.203.v201407291301.jar@start +com.ibm.team.jfs.app.nl1_1.2.1.v201211071552.jar@start +com.ibm.team.jfs.app.nl2_1.3.1000.v201505131345.jar@start +com.ibm.team.jfs.app.nl2a_1.2.1.v201211071552.jar@start +com.ibm.team.jfs.app.oauth_1.3.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.query_1.3.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.query.nl1_1.2.2.v201404231308.jar@start +com.ibm.team.jfs.app.query.nl2_1.2.0.v201205171340.jar@start +com.ibm.team.jfs.app.query.nl2a_1.2.2.v201404231308.jar@start +com.ibm.team.jfs.app.rdf_1.1.3000.v20171113_1937.jar@start +com.ibm.team.jfs.app.resource_1.3.2000.v20171113_1748.jar@start +com.ibm.team.jfs.app.scenario_1.0.3000.v20171018_1727.jar@start +com.ibm.team.jfs.app.servlet_1.3.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.servlet.nl1_1.2.5.v201505131347.jar@start +com.ibm.team.jfs.app.servlet.nl2_1.2.2.v201307311200.jar@start +com.ibm.team.jfs.app.servlet.nl2a_1.2.5.v201505131349.jar@start +com.ibm.team.jfs.app.util_1.3.4000.v20180427_2027.jar@start +com.ibm.team.jfs.app.util.nl1_1.3.5.v201805161731.jar@start +com.ibm.team.jfs.app.util.nl2_1.3.5.v201805161729.jar@start +com.ibm.team.jfs.app.util.nl2a_1.3.5.v201805161733.jar@start +com.ibm.team.jfs.app.util.nls_3.0.3000.v20171113_1748.jar@start +com.ibm.team.jfs.app.util.registry_3.1.2000.v20171113_1748.jar@start +com.ibm.team.jfs.app.xml_1.3.2000.v20171113_1748.jar@start +com.ibm.team.jfs.app.xml.nl1_1.1.3.v201307311205.jar@start +com.ibm.team.jfs.app.xml.nl2_1.1.1.v201109280231.jar@start +com.ibm.team.jfs.app.xml.nl2a_1.1.3.v201307311205.jar@start +com.ibm.team.jfs.baseline_1.1.6000.v20171113_1937.jar@start +com.ibm.team.jfs.common.http.internal_1.0.3000.v20171113_1937.jar@start +com.ibm.team.jfs.common.internal_1.2.4000.v20171113_1937.jar@start +com.ibm.team.jfs.common.model_1.3.3000.v20171113_1937.jar@start +com.ibm.team.jfs.core_1.3.4000.v20180416_1651.jar@start +com.ibm.team.jfs.indexing_1.2.4000.v20180416_1651.jar@start +com.ibm.team.jfs.indexing.common_1.0.5000.v20171113_1937.jar@start +com.ibm.team.jfs.rdf.internal.jena_1.2.4000.v20180416_1651.jar@start +com.ibm.team.jfs.sdk.baseline_1.1.4000.v20171113_1937.jar@start +com.ibm.team.jfs.sdk.common_1.1.3000.v20171113_1937.jar@start +com.ibm.team.jfs.sdk.indexing_1.1.4000.v20171018_1727.jar@start +com.ibm.team.jfs.sdk.query_1.1.4000.v20171113_1937.jar@start +com.ibm.team.jfs.sdk.search_1.1.4000.v20180416_1651.jar@start +com.ibm.team.jfs.sdk.storage_1.1.4000.v20171018_1727.jar@start +com.ibm.team.jfs.search_1.2.3000.v20180416_1651.jar@start +com.ibm.team.jfs.storage_1.2.4000.v20171018_1727.jar@start +com.ibm.team.json_1.2.3000.v20171113_1748.jar@start +com.ibm.team.juno_5.2.2000.v20171113_1748.jar@start +com.ibm.team.juno.client_5.2.2000.v20171113_1748.jar@start +com.ibm.team.juno.server_5.2.2000.v20180416_1651.jar@start +com.ibm.team.juno.test_5.1.1000.v20171018_1910/@start +com.ibm.team.lpa.app_4.2.4000.v20180504_0035.jar@start +com.ibm.team.lpa.automation_4.0.5000.v20180116_1745.jar@start +com.ibm.team.lpa.common_4.1.4000.v20180209_1738.jar@start +com.ibm.team.lpa.sample.sdk.service_3.1.3000.v20180405_1931.jar@start +com.ibm.team.opaque.service_1.1.6000.v20171113_1937.jar@start +com.ibm.team.osgi.patch_5.0.4000.v20171117_1736.jar@start +com.ibm.team.process.authoring.common_1.2.3000.v20180111_0137.jar@start +com.ibm.team.process.authoring.service_1.2.4000.v20171018_1727.jar@start +com.ibm.team.process.authoring.service.frontingapp_1.1.4000.v20171113_1937.jar@start +com.ibm.team.process.authoring.web.common_1.2.4000.v20180128_1644.jar@start +com.ibm.team.process.authoring.web.frontingapp_1.1.5000.v20171113_1937.jar@start +com.ibm.team.process.common_1.3.4000.v20180416_1641.jar@start +com.ibm.team.process.definitions.server_3.1.1600.v20180424_0219.jar@start +com.ibm.team.process.models_1.2.4000.v20171113_1731/@start +com.ibm.team.process.service_1.3.4000.v20180416_1651.jar@start +com.ibm.team.process.service.migration_1.3.3000.v20171018_1727.jar@start +com.ibm.team.process.service.shared_1.1.3000.v20171113_1937.jar@start +com.ibm.team.process.web_1.3.4000.v20180506_1631.jar@start +com.ibm.team.qp_1.101.200.v20180527_0109.jar@start +com.ibm.team.qp.cql_1.1.0.v20161102_2211.jar@start +com.ibm.team.qp.cql.workitem.services_1.1.100.v20180314_0203.jar@start +com.ibm.team.qp.crossproject.services_1.1.0.v20161102_2211.jar@start +com.ibm.team.qp.crossproject.views.services_1.1.0.v20161102_2211.jar@start +com.ibm.team.qp.crossproject.web_1.1.0.v20161102_2211.jar@start +com.ibm.team.qp.data.services_1.1.100.v20170728_0324.jar@start +com.ibm.team.qp.server_1.1.100.v20170928_1838.jar@start +com.ibm.team.qp.transport_1.1.100.v20170919_1827.jar@start +com.ibm.team.qp.views.services_1.1.200.v20180507_1802.jar@start +com.ibm.team.qp.workitem.services_1.1.0.v20161102_2211.jar@start +com.ibm.team.reports.apt.service_3.1.300.v20161206_2005.jar@start +com.ibm.team.reports.apt.service.rest_3.1.1100.v20161206_2005.jar@start +com.ibm.team.reports.apt.web_3.1.300.v20161206_2005.jar@start +com.ibm.team.reports.build.service.rest_3.1.1000.v20161206_2005.jar@start +com.ibm.team.reports.cognos.jars_2.3.2000.v20171113_1937.jar@start +com.ibm.team.reports.cognos.web_2.1.3000.v20171113_1937/@start +com.ibm.team.reports.common_2.4.3000.v20180424_0024.jar@start +com.ibm.team.reports.common.oda_2.2.2000.v20171113_1731.jar@start +com.ibm.team.reports.jfs.configuration_3.1.4000.v20171018_1727.jar@start +com.ibm.team.reports.rtc.configuration_3.1.1400.v20161206_2005.jar@start +com.ibm.team.reports.rtc.viewlets.web_3.1.700.v20161206_2005/@start +com.ibm.team.reports.scm.service.rest_3.1.1100.v20161206_2005.jar@start +com.ibm.team.reports.scm.web_3.1.300.v20170328_0148.jar@start +com.ibm.team.reports.service_2.4.4000.v20180503_1731.jar@start +com.ibm.team.reports.service.birt_2.2.6000.v20180424_0037.jar@start +com.ibm.team.reports.service.cognos_0.6.7000.v20180424_0037.jar@start +com.ibm.team.reports.service.oda_2.3.3000.v20171018_1727.jar@start +com.ibm.team.reports.service.rest_2.3.8000.v20180426_0027.jar@start +com.ibm.team.reports.service.rpe_3.1.4000.v20180424_0037.jar@start +com.ibm.team.reports.viewlets.web_2.1.7000.v20171113_1937.jar@start +com.ibm.team.reports.web_2.2.4000.v20180424_0037/@start +com.ibm.team.reports.workitem.common_3.1.900.v20170613_0129.jar@start +com.ibm.team.reports.workitem.service_3.1.300.v20161206_2005.jar@start +com.ibm.team.reports.workitem.service.rest_3.1.1200.v20161206_2005.jar@start +com.ibm.team.reports.workitem.web_3.1.500.v20161206_2005/@start +com.ibm.team.repository.client_1.3.4000.v20180503_1655.jar@start +com.ibm.team.repository.client.tests_1.2.0.v20171113_2349/@start +com.ibm.team.repository.common_1.4.4000.v20180417_0035.jar@start +com.ibm.team.repository.common.json_1.2.3000.v20171113_1731.jar@start +com.ibm.team.repository.common.remoteaccess_1.2.4000.v20180504_0021.jar@start +com.ibm.team.repository.common.remoteaccess.auth_1.3.3000.v20171113_1731.jar@start +com.ibm.team.repository.common.serialize_1.2.4000.v20171202_0140.jar@start +com.ibm.team.repository.common.serialize.tests_1.1.1.v20171018_1910.jar@start +com.ibm.team.repository.common.tests_1.1.2000.v20171018_1910.jar@start +com.ibm.team.repository.common.transport_1.2.2000.v20171113_1731.jar@start +com.ibm.team.repository.debug_4.1.4000.v20180423_1647.jar@start +com.ibm.team.repository.jdbcdriver.db2_1.2.4000.v20180309_2020/@start +com.ibm.team.repository.jdbcdriver.db2i_1.2.4000.v20180424_1655/@start +com.ibm.team.repository.jdbcdriver.db2z_1.2.4000.v20180424_1655/@start +com.ibm.team.repository.jdbcdriver.derby_1.2.4000.v20171018_1727.jar@start +com.ibm.team.repository.jdbcdriver.oracle_1.2.4000.v20180313_0029.jar@start +com.ibm.team.repository.jdbcdriver.sqlserver_1.2.4000.v20180327_0043.jar@start +com.ibm.team.repository.jndi_1.1.3000.v20171113_1748.jar@start +com.ibm.team.repository.license.discovery_3.1.3000.v20171018_1727.jar@start +com.ibm.team.repository.localgroups_1.1.3000.v20171113_1937.jar@start +com.ibm.team.repository.provision_1.3.4000.v20180502_2347.jar@start +com.ibm.team.repository.rcp.common_3.1.900.v20170613_0129.jar@start +com.ibm.team.repository.service_1.3.5000.v20180516_0132/@start +com.ibm.team.repository.service.compatibility.auth_1.1.5000.v20171018_1727.jar@start +com.ibm.team.repository.service.compatibility.contributor_3.1.4000.v20171018_1727.jar@start +com.ibm.team.repository.service.compatibility.contributor.tests_3.0.1.v20171018_1910.jar@start +com.ibm.team.repository.service.compatibility.discovery_1.0.3000.v20171018_1727.jar@start +com.ibm.team.repository.service.compatibility.license.tests_1.0.0.v20171018_1910.jar@start +com.ibm.team.repository.service.compatibility.licensing_3.1.3000.v20171018_1727.jar@start +com.ibm.team.repository.service.compatibility.mailer_3.0.6000.v20171018_1727.jar@start +com.ibm.team.repository.service.compatibility.resolution_3.1.2000.v20171018_1727.jar@start +com.ibm.team.repository.service.compatibility.user.registry_3.1.3000.v20171018_1727.jar@start +com.ibm.team.repository.service.compatibility.user.registry.tests_3.0.1.v20171018_1910.jar@start +com.ibm.team.repository.service.compatibility.util_3.1.4000.v20171018_1727.jar@start +com.ibm.team.repository.service.compatibility.util.tests_3.0.2000.v20171018_1910.jar@start +com.ibm.team.repository.service.diagnostics.basic_3.1.4000.v20180127_0138.jar@start +com.ibm.team.repository.service.diagnostics.basic.tests_3.0.1000.v20171018_1910.jar@start +com.ibm.team.repository.service.diagnostics.database_3.0.8000.v20171018_1727.jar@start +com.ibm.team.repository.service.diagnostics.database.tests_3.0.100.v20171018_1910.jar@start +com.ibm.team.repository.service.diagnostics.properties_3.1.3000.v20171018_1727.jar@start +com.ibm.team.repository.service.jdbc41_1.1.5000.v20171018_1727.jar@start +com.ibm.team.repository.service.jts.auth_3.1.4000.v20171018_1727.jar@start +com.ibm.team.repository.service.jts.auth.proxy_1.1.6000.v20171018_1727.jar@start +com.ibm.team.repository.service.jts.contributor_3.1.4000.v20171018_1727.jar@start +com.ibm.team.repository.service.jts.contributor.tests_3.0.1.v20171018_1910.jar@start +com.ibm.team.repository.service.jts.discovery_3.2.0.v20180409_1629.jar@start +com.ibm.team.repository.service.jts.discovery.tests_3.0.2000.v20180307_0939.jar@start +com.ibm.team.repository.service.jts.external.licensing_1.1.4000.v20171018_1727.jar@start +com.ibm.team.repository.service.jts.external.licensing.tests_1.0.1000.v20171018_1910.jar@start +com.ibm.team.repository.service.jts.licensing_3.1.4000.v20180412_2030.jar@start +com.ibm.team.repository.service.jts.mailer_3.1.3000.v20171113_1937.jar@start +com.ibm.team.repository.service.jts.migration_1.2.3000.v20171018_1727.jar@start +com.ibm.team.repository.service.jts.oauth_3.1.4000.v20180426_1645.jar@start +com.ibm.team.repository.service.jts.shared_3.0.5000.v20171018_1727.jar@start +com.ibm.team.repository.service.jts.user.registry_3.1.4000.v20180412_2030.jar@start +com.ibm.team.repository.service.jts.user.registry.tests_3.0.1000.v20180323_1821.jar@start +com.ibm.team.repository.service.migration_1.2.4000.v20180416_1651.jar@start +com.ibm.team.repository.service.monitoring_1.1.4000.v20171018_1727.jar@start +com.ibm.team.repository.service.productregistry_3.1.2000.v20171113_1937.jar@start +com.ibm.team.repository.service.rename_1.1.4000.v20180214_0532.jar@start +com.ibm.team.repository.service.setup_1.3.4000.v20171018_1727.jar@start +com.ibm.team.repository.service.setup.processor_1.1.4000.v20171018_1727.jar@start +com.ibm.team.repository.service.tests_1.1.2000.v20180423_1822/@start +com.ibm.team.repository.services.compatibility.contributor.tests_3.0.1.v20171018_1910.jar@start +com.ibm.team.repository.servlet_1.2.4000.v20180314_0033/@start +com.ibm.team.repository.tests.common_1.1.2000.v20180327_1829/@start +com.ibm.team.repository.tests.common.fragment_1.1.1.v20171018_1910/@start +com.ibm.team.repository.tests.evolution.server_1.1.1000.v20171018_1910.jar@start +com.ibm.team.repository.tests.service_1.1.2000.v20171018_1910/@start +com.ibm.team.repository.tests.smtp_1.0.0.v20171018_1910.jar@start +com.ibm.team.repository.userregistry.provider.ldaplocalgroup_1.1.6000.v20171018_1727.jar@start +com.ibm.team.repository.web_1.2.4000.v20180501_1644.jar@start +com.ibm.team.repository.web.jts_1.2.4000.v20180321_0156.jar@start +com.ibm.team.repotools.command_1.1.5000.v20171018_1727.jar@start +com.ibm.team.repotools.command.tests_1.2.1000.v20171018_1910.jar@start +com.ibm.team.repotools.commands.local_1.2.4000.v20180214_0532.jar@start +com.ibm.team.repotools.commands.move_1.1.4000.v20180412_2030.jar@start +com.ibm.team.repotools.commands.remote_0.10.4000.v20180214_0532.jar@start +com.ibm.team.repotools.commands.remote.stats_0.7.5000.v20171113_1937.jar@start +com.ibm.team.repotools.commands.upgrade_1.1.4000.v20171117_1736.jar@start +com.ibm.team.repotools.commands.upgrade.ccm_1.0.4000.v20171018_1727.jar@start +com.ibm.team.repotools.commands.upgrade.gc_1.0.3000.v20171113_1937.jar@start +com.ibm.team.repotools.commands.upgrade.jts_1.0.6000.v20171018_1727.jar@start +com.ibm.team.repotools.commands.upgrade.qm_1.0.4000.v20171018_1727.jar@start +com.ibm.team.repotools.commands.upgrade.rm_1.1.4000.v20171018_1727.jar@start +com.ibm.team.repotools.rcp_1.2.4000.v20180207_1727/@start +com.ibm.team.repotools.util_1.1.7000.v20171018_1727.jar@start +com.ibm.team.rtc.common_3.1.1800.v20180429_1815.jar@start +com.ibm.team.rtc.common.scriptengine_3.1.1300.v20170613_0129.jar@start +com.ibm.team.rtc.common.service_3.0.1600.v20180509_0046.jar@start +com.ibm.team.rtc.foundation.api.common_3.1.1000.v20170613_0129.jar@start +com.ibm.team.rtc.foundation.api.ui_3.1.1400.v20170928_1641.jar@start +com.ibm.team.rtc.foundation.jdojo.stubs_3.2.1500.v20180314_0033.jar@start +com.ibm.team.rtc.foundation.web_3.1.1200.v20171026_0320.jar@start +com.ibm.team.rtc.foundation.web.ui_3.1.1800.v20180424_1831.jar@start +com.ibm.team.rtc.oslc.service_1.1.100.v20180410_0218.jar@start +com.ibm.team.rtc.relm_1.1.0.v20161102_2211.jar@start +com.ibm.team.rtc.web_3.0.1800.v20180527_0514.jar@start +com.ibm.team.scm.admin.common_3.2.400.v20170613_0129.jar@start +com.ibm.team.scm.admin.service_3.2.600.v20161206_2005.jar@start +com.ibm.team.scm.common_3.2.1100.v20180504_0035.jar@start +com.ibm.team.scm.oslc.common_1.1.200.v20180410_0037.jar@start +com.ibm.team.scm.oslc.service_1.1.200.v20180429_1945.jar@start +com.ibm.team.scm.oslc.service.web_1.1.200.v20180421_0043.jar@start +com.ibm.team.scm.repotools_1.1.100.v20171017_0218.jar@start +com.ibm.team.scm.sdk_1.0.200.v20180314_0203.jar@start +com.ibm.team.scm.service_3.2.1100.v20180525_2329.jar@start +com.ibm.team.scm.svn.common_3.1.700.v20170613_0129.jar@start +com.ibm.team.scm.svn.service_3.1.600.v20180314_0203.jar@start +com.ibm.team.scm.web_3.1.1800.v20180509_0046/@start +com.ibm.team.server.embedded.jetty_1.1.5000.v20171113_1937.jar@start +com.ibm.team.server.embedded.jetty.auth_1.1.1.v20171018_1727.jar@start +com.ibm.team.server.embedded.webapp.webui_1.1.1.v20171018_1727/@start +com.ibm.team.server.httpcore.bridge_1.1.3000.v20171113_1748.jar@start +com.ibm.team.server.oidc.sdk_1.1.0.v20180517_2014/@start +com.ibm.team.social.common_3.1.800.v20180314_0203.jar@start +com.ibm.team.social.common.model_3.1.700.v20161206_2005.jar@start +com.ibm.team.social.lotus.connections_3.1.600.v20180410_0218.jar@start +com.ibm.team.social.service_3.1.800.v20180403_2108.jar@start +com.ibm.team.social.web_3.1.1100.v20180410_0218.jar@start +com.ibm.team.tempo.shared.client_3.0.1300.v20170613_0129.jar@start +com.ibm.team.tpt.common_3.1.900.v20170613_0129.jar@start +com.ibm.team.tpt.service_3.1.1500.v20180314_0203.jar@start +com.ibm.team.tpt.shared.common_3.0.700.v20170613_0129.jar@start +com.ibm.team.tpt.web.client_3.0.600.v20161206_2005/@start +com.ibm.team.tpt.web.ui_3.0.1700.v20171016_1640.jar@start +com.ibm.team.vs.service_1.1.100.v20180323_0849.jar@start +com.ibm.team.workitem.api.common_3.1.1400.v20180330_0051.jar@start +com.ibm.team.workitem.common_3.2.1000.v20180506_1631.jar@start +com.ibm.team.workitem.java.common_3.1.900.v20170613_0129.jar@start +com.ibm.team.workitem.sample.money_3.1.700.v20170112_0255.jar@start +com.ibm.team.workitem.service_3.1.1800.v20180509_0046.jar@start +com.ibm.team.workitem.service.process_3.1.1500.v20180314_0203.jar@start +com.ibm.team.workitem.shared.common_3.1.1600.v20180410_0037.jar@start +com.ibm.team.workitem.viewlets.web_3.1.1600.v20180328_0215.jar@start +com.ibm.team.workitem.web_3.1.1800.v20180510_0145/@start +com.ibm.team.workitem.web.process_3.1.1600.v20180407_0208.jar@start +com.ibm.team.workitem.web.richtext.editor_3.1.1200.v20170403_1327/@start +com.ibm.ut.help.parser_2.6.1.v20141107_1924.jar@start +com.ibm.ut.tips.viewlet.web_1.0.400.v20141104_1659.jar@start +com.lowagie.text_2.1.7.v201004222200.jar@start +com.sun.syndication_1.0.2000.v20171016_2226/@start +javax.activation_1.1.0.v201211130549.jar@start +javax.crypto_1.0.0.v20171016_2226.jar@start +javax.el_2.1.1100.v20180417_2022.jar@start +javax.mail_1.4.0.v201005080615.jar@start +javax.servlet_3.0.0.v201112011016.jar@start +javax.servlet.jsp_2.1.100.v20180417_2022.jar@start +javax.xml_1.3.4.v201005080400.jar@start +javax.xml.stream_1.0.1.v201004272200.jar@start +net.jazz.ajax_6.0.3000.v20180424_1655.jar@start +net.jazz.ajax.service_6.0.3000.v20180322_1640.jar@start +net.jazz.web.app_6.0.3000.v20180222_0330.jar@start +net.jazz.web.ck_4.4.7000.v20171113_1937.jar@start +net.jazz.web.ck.stubs_4.0.400.v20170112_0255/@start +net.jazz.web.client_1.1.2000.v20171113_1937.jar@start +net.jazz.web.core_2.1.4000.v20171113_1937.jar@start +net.jazz.web.ensemble_6.0.3000.v20171113_1937.jar@start +net.jazz.web.jsp_6.0.2000.v20171113_1937.jar@start +net.jazz.web.jstl_3.5.4000.v20171113_1937.jar@start +net.jazz.web.opensocial_6.0.3000.v20171113_1937.jar@start +net.jazz.web.ui_6.0.3000.v20180330_0051.jar@start +net.jazz.web.util_6.0.2000.v20180516_0132.jar@start +net.oauth_0.2.3000.v20180417_2022.jar@start +net.pieroxy.lzstring_1.4.0.v20161102_2211.jar@start +net.pieroxy.lzstring.stubs_1.4.0.v20161102_2211.jar@start +org.antlr_1.1.100.v20170613_0129/@start +org.apache.batik.bridge_1.6.0.v201011041432.jar@start +org.apache.batik.css_1.6.0.v201011041432.jar@start +org.apache.batik.dom_1.6.0.v201011041432.jar@start +org.apache.batik.dom.svg_1.6.0.v201011041432.jar@start +org.apache.batik.ext.awt_1.6.0.v201011041432.jar@start +org.apache.batik.parser_1.6.0.v201011041432.jar@start +org.apache.batik.pdf_1.6.0.v201105071520.jar@start +org.apache.batik.svggen_1.6.0.v201011041432.jar@start +org.apache.batik.transcoder_1.6.0.v201011041432.jar@start +org.apache.batik.util_1.6.0.v201011041432.jar@start +org.apache.batik.util.gui_1.6.0.v201011041432.jar@start +org.apache.batik.xml_1.6.0.v201011041432.jar@start +org.apache.commons.codec_1.6.0.v201305230611.jar@start +org.apache.commons.fileupload_1.3.1.v20171016_2226/@start +org.apache.commons.httpclient_3.1.0.v20171016_2226/@start +org.apache.commons.io_1.2.1100.v20171016_2226/@start +org.apache.commons.lang_2.6.0.v201404270220.jar@start +org.apache.commons.logging_1.1.1.v201101211721.jar@start +org.apache.commons.logging.log4j_1.0.1100.v20171016_2226.jar@start +org.apache.commons.net_2.2.0.v201101241833.jar@start +org.apache.derby.core_10.10.100.v20171018_1727/@start +org.apache.el_6.0.1100.v20180417_2022.jar@start +org.apache.felix.gogo.command_0.10.0.v201209301215.jar@start +org.apache.felix.gogo.runtime_0.10.0.v201209301036.jar@start +org.apache.felix.gogo.shell_0.10.0.v201212101605.jar@start +org.apache.http_4.4.1.v20171016_2226/@start +org.apache.http.client_4.5.0.v20171016_2226/@start +org.apache.james.mime4j_0.6.0.v20120423/@start +org.apache.jasper_6.0.1200.v20171016_2226.jar@start +org.apache.log4j_1.2.15.v201012070815.jar@start +org.apache.lucene2_2.4.500.v20171016_2226/@start +org.apache.naming_5.5.1100.v20171016_2226/@start +org.apache.velocity_1.5.100.v20171016_2226/@start +org.apache.xalan_2.7.100.v20171016_2226.jar@start +org.apache.xerces_2.9.0.v201101211617.jar@start +org.apache.xml.resolver_1.2.0.v201005080400.jar@start +org.apache.xml.serializer_2.7.1.v201005080400.jar@start +org.dojotoolkit.dijit_1.8.4.v20171016_2226.jar@start +org.dojotoolkit.doh_1.8.1.v20171016_2226/@start +org.dojotoolkit.dojo_1.8.4.v20171016_2226.jar@start +org.dojotoolkit.dojox_1.8.1000.v20171016_2226.jar@start +org.dojotoolkit.shrinksafe_5.0.1000.v20180417_2022.jar@start +org.eclipse.birt.chart.device.extension_4.4.2.v201410272105.jar@start +org.eclipse.birt.chart.device.svg_4.4.2.v201410272105.jar@start +org.eclipse.birt.chart.engine_4.4.2.v201410272105.jar@start +org.eclipse.birt.chart.engine.extension_4.4.2.v201410272105.jar@start +org.eclipse.birt.chart.reportitem_4.4.2.v201410272105.jar@start +org.eclipse.birt.core_4.4.2.v201410272105.jar@start +org.eclipse.birt.core.script.function_4.4.2.v201410272105.jar@start +org.eclipse.birt.data_4.4.2.v201501161327.jar@start +org.eclipse.birt.data.aggregation_4.4.2.v201412150442.jar@start +org.eclipse.birt.report.data.adapter_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.data.bidi.utils_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.data.oda.jdbc_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.data.oda.jdbc.dbprofile_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.data.oda.xml_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.engine_4.4.2.v201411040904.jar@start +org.eclipse.birt.report.engine.dataextraction_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.engine.dataextraction.csv_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.engine.emitter.html_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.engine.emitter.pdf_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.engine.emitter.postscript_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.engine.emitter.ppt_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.engine.emitter.prototype.excel_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.engine.emitter.wpml_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.engine.fonts_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.engine.script.javascript_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.item.crosstab.core_4.4.2.v201410272105.jar@start +org.eclipse.birt.report.model_4.4.2.v201412291450.jar@start +org.eclipse.birt.report.model.adapter.oda_4.4.2.v201410272105.jar@start +org.eclipse.core.commands_3.6.100.v20140528-1422.jar@start +org.eclipse.core.contenttype_3.4.200.v20140207-1251.jar@start +org.eclipse.core.expressions_3.4.600.v20140128-0851.jar@start +org.eclipse.core.filesystem_1.4.100.v20140514-1614.jar@start +org.eclipse.core.filesystem.aix.ppc_1.1.0.v20140124-1940.jar@start +org.eclipse.core.filesystem.aix.ppc64_1.1.0.v20140124-1940.jar@start +org.eclipse.core.filesystem.hpux.ia64_1.1.0.v20140124-1940.jar@start +org.eclipse.core.filesystem.java7_1.0.0.v20140429-1531.jar@start +org.eclipse.core.filesystem.linux.ppc_1.0.200.v20140124-1940.jar@start +org.eclipse.core.filesystem.linux.ppc64_1.4.0.v20140124-1940.jar@start +org.eclipse.core.filesystem.linux.ppc64le_1.4.0.v20140808-1353.jar@start +org.eclipse.core.filesystem.linux.x86_1.4.200.v20140124-1940.jar@start +org.eclipse.core.filesystem.linux.x86_64_1.2.200.v20140124-1940.jar@start +org.eclipse.core.filesystem.macosx_1.3.0.v20140124-1940.jar@start +org.eclipse.core.filesystem.solaris.sparc_1.2.0.v20140124-1940.jar@start +org.eclipse.core.filesystem.win32.x86_1.4.0.v20140124-1940.jar@start +org.eclipse.core.filesystem.win32.x86_64_1.4.0.v20140124-1940.jar@start +org.eclipse.core.jobs_3.6.1.v20141014-1248.jar@start +org.eclipse.core.net_1.2.200.v20140124-2013.jar@start +org.eclipse.core.net.linux.x86_1.1.300.v20140124-2013.jar@start +org.eclipse.core.net.linux.x86_64_1.1.100.v20140124-2013.jar@start +org.eclipse.core.net.win32.x86_1.0.100.v20140124-2013.jar@start +org.eclipse.core.net.win32.x86_64_1.0.100.v20140124-2013.jar@start +org.eclipse.core.resources_3.9.1.v20140825-1431.jar@start +org.eclipse.core.resources.win32.x86_3.5.100.v20140124-1940.jar@start +org.eclipse.core.resources.win32.x86_64_3.5.0.v20140124-1940.jar@start +org.eclipse.core.runtime_3.10.0.v20140318-2214.jar@start +org.eclipse.core.runtime.compatibility.registry_3.5.300.v20140128-0851/@start +org.eclipse.datatools.connectivity_1.2.11.v201401230755.jar@start +org.eclipse.datatools.connectivity.oda_3.4.3.v201405301249.jar@start +org.eclipse.datatools.connectivity.oda.consumer_3.2.6.v201403131814.jar@start +org.eclipse.datatools.connectivity.oda.design_3.3.6.v201403131814.jar@start +org.eclipse.datatools.connectivity.oda.flatfile_3.1.8.v201403010906.jar@start +org.eclipse.datatools.connectivity.oda.profile_3.2.9.v201403131814.jar@start +org.eclipse.datatools.connectivity.sqm.core_1.2.8.v201401230755.jar@start +org.eclipse.datatools.enablement.oda.xml_1.2.5.v201403131825.jar@start +org.eclipse.datatools.modelbase.dbdefinition_1.0.2.v201107221519.jar@start +org.eclipse.datatools.modelbase.sql_1.0.6.v201208230744.jar@start +org.eclipse.datatools.modelbase.sql.query_1.1.4.v201212120619.jar@start +org.eclipse.emf.common_2.10.1.v20150123-0348.jar@start +org.eclipse.emf.ecore_2.10.2.v20150123-0348.jar@start +org.eclipse.emf.ecore.change_2.10.0.v20150123-0348.jar@start +org.eclipse.emf.ecore.edit_2.9.0.v20150123-0452.jar@start +org.eclipse.emf.ecore.xmi_2.10.2.v20150123-0348.jar@start +org.eclipse.emf.edit_2.10.1.v20150123-0452.jar@start +org.eclipse.emf.mapping.ecore2xml_2.8.0.v20150123-0452.jar@start +org.eclipse.emf.query_1.7.0.201405281426.jar@start +org.eclipse.equinox.app_1.3.200.v20130910-1609.jar@start +org.eclipse.equinox.common_3.6.200.v20130402-1505.jar@start +org.eclipse.equinox.console_1.1.0.v20140131-1639.jar@start +org.eclipse.equinox.ds_1.4.200.v20131126-2331.jar@start +org.eclipse.equinox.http.jetty_3.0.200.v20131021-1843.jar@start +org.eclipse.equinox.http.registry_1.1.300.v20130402-1529.jar@start +org.eclipse.equinox.http.servlet_1.1.500.v20140318-1755.jar@start +org.eclipse.equinox.preferences_3.5.200.v20140224-1527.jar@start +org.eclipse.equinox.region_1.2.0.v20140128-1636.jar@start +org.eclipse.equinox.registry_3.5.400.v20140428-1507.jar@start +org.eclipse.equinox.security_1.2.0.v20130424-1801.jar@start +org.eclipse.equinox.security.macosx_1.100.200.v20130327-1442.jar@start +org.eclipse.equinox.security.win32.x86_1.0.300.v20130327-1442.jar@start +org.eclipse.equinox.security.win32.x86_64_1.0.100.v20130327-1442.jar@start +org.eclipse.equinox.simpleconfigurator_1.1.0.v20131217-1203.jar@start +org.eclipse.equinox.transforms.hook_1.1.0.v20131021-1933.jar@start +org.eclipse.equinox.util_1.0.500.v20130404-1337.jar@start +org.eclipse.equinox.weaving.hook_1.1.1.v20140821-1918.jar@start +org.eclipse.jdt.compiler.apt_1.1.0.v20150122-0735.jar@start +org.eclipse.jdt.compiler.tool_1.0.300.v20150114-1827.jar@start +org.eclipse.jdt.core_3.10.2.v20150120-1634.jar@start +org.eclipse.jetty.continuation_8.1.16.v20140903.jar@start +org.eclipse.jetty.http_8.1.16.v20140903.jar@start +org.eclipse.jetty.io_8.1.16.v20140903.jar@start +org.eclipse.jetty.jmx_8.1.16.v20140903/@start +org.eclipse.jetty.jndi_8.1.16.v20140903/@start +org.eclipse.jetty.security_8.1.16.v20140903.jar@start +org.eclipse.jetty.server_8.1.16.v20140903.jar@start +org.eclipse.jetty.servlet_8.1.16.v20140903.jar@start +org.eclipse.jetty.util_8.1.16.v20140903.jar@start +org.eclipse.jetty.webapp_8.1.16.v20140903.jar@start +org.eclipse.jetty.xml_8.1.16.v20140903.jar@start +org.eclipse.osgi_3.10.2.v20150203-1939.jar@start +org.eclipse.osgi.compatibility.state_1.0.1.v20140709-1414.jar@start +org.eclipse.osgi.services_3.4.0.v20140312-2051.jar@start +org.eclipse.osgi.util_3.3.0.v20131023-1243.jar@start +org.eclipse.paho.client.mqttv3_1.1.0.v20171016_2226/@start +org.eclipse.test.performance_3.8.0.v20120528-1648.jar@start +org.eclipse.test.performance.win32_3.1.100.jar@start +org.eclipse.text_3.5.300.v20130515-1451.jar@start +org.eclipse.xsd_2.10.0.v20150123-0452.jar@start +org.hamcrest.core_1.3.0.v201303031735.jar@start +org.jdom_1.1.1.v201101151400.jar@start +org.junit_4.11.0.v201303080030/@start +org.mockito.java_1.1.0.v20170517_1842/@start +org.mozilla.javascript_1.7.2.v201005080400.jar@start +org.mozilla.rhino_1.7.1100.v20171016_2226/@start +org.tmatesoft.svnkit_1.1.4.v20180417_2022/@start +org.w3c.css.sac_1.3.1.v200903091627.jar@start +org.w3c.dom.smil_1.0.0.v200806040011.jar@start +org.w3c.dom.svg_1.1.0.v201011041433.jar@start +org.w3c.sac_1.3.0.v201501121639.jar@start diff --git a/tool/templates/config.twig b/tool/templates/config.twig new file mode 100644 index 0000000..81dd45c --- /dev/null +++ b/tool/templates/config.twig @@ -0,0 +1,5 @@ +osgi.bundles.defaultStartLevel=4 +osgi.install.area=sdk +osgi.framework=sdk/plugins/{{ osgiPath }} +osgi.configuration.cascaded=false +osgi.bundles=reference\:file\:{{ configurator }}@1\:start,{% for bundle in bundles %}reference\:file\:{{ bundle }},{% endfor %}{% for config in configs %}{{ config }},{% endfor %} \ No newline at end of file diff --git a/tool/templates/dev.twig b/tool/templates/dev.twig new file mode 100644 index 0000000..e89056a --- /dev/null +++ b/tool/templates/dev.twig @@ -0,0 +1,3 @@ +@ignoredot@=true +{% for property in properties %}{{ property }} +{% endfor %} diff --git a/tool/templates/linux_terminal_emulator.cfg b/tool/templates/linux_terminal_emulator.cfg new file mode 100644 index 0000000..d986e72 --- /dev/null +++ b/tool/templates/linux_terminal_emulator.cfg @@ -0,0 +1,7 @@ +# this is the command line used to start the 'run_jetty' command when +# starting a runtime. Adjust this for running the terminal emulator +# of your choice. The default is gnome-terminal. +gnome-terminal -- ./run_jetty.sh + +# if, for example, your shell was xterm, you would use: +# xterm -e ./run_jetty.sh diff --git a/tool/templates/run_time_parameters.cfg b/tool/templates/run_time_parameters.cfg new file mode 100644 index 0000000..29b6df3 --- /dev/null +++ b/tool/templates/run_time_parameters.cfg @@ -0,0 +1,5 @@ +# in this file, you can define additional run time parameters which are +# passed to the java run time when jetty is launched. +# example: the following line can be uncommented for setting the private +# key for PersonalTokenService +# com.siemens.bt.jazz.services.PersonalTokenService.privateKey=abcdefghijklmnop diff --git a/tool/templates/workspaces_template.cfg b/tool/templates/workspaces_template.cfg new file mode 100644 index 0000000..f03d018 --- /dev/null +++ b/tool/templates/workspaces_template.cfg @@ -0,0 +1,9 @@ +# List of java workspaces that are supposed to be live-deployed during a +# debugging session. It's easiest to use absolute paths for these paths, +# because you remain flexible with the location of the entire package. +# You can just paste the folder in here, eg, how you copy it from your +# file manager. Every workspace should be on a new line, but you can +# define an arbitrary amount of folders. + +# Example: a workspace on drive D could look like this: +# D:\workspaces\rtc-git-connector