Coder Social home page Coder Social logo

liberty-tools-eclipse's Introduction

Welcome to the Liberty Tools for Eclipse IDE project

License

A Liberty plugin for the Eclipse IDE. The plugin allows you to run your Liberty Maven or Liberty Gradle projects in dev mode through the Liberty dashboard view or through the project explorer view. You can start, stop, or interact with Liberty dev mode on all configured Liberty Maven and Liberty Gradle projects in your workspace.


Liberty dashboard

Maven Projects Gradle Projects
Dashboard context menu for Maven Projects Dashboard context menu for Gradle Projects

Explorer view

Dashboard context menu view

Quick start

  • Understand the prerequisites
  • Install Liberty Tools.
  • Install your Maven or Gradle application.
  • Open the Liberty dashboard view by clicking on the Open Liberty icon on the toolbar, or open the project explorer view.
  • Right-click on your application in the Liberty dashboard to view the available action commands. If you are using the project explorer view, right-click on your application and select the Run As entry on the menu to view the available Liberty launch shortcuts.

For detailed instructions on how to use the Liberty dashboard context menu commands or the Liberty launch shortcuts in the project explorer view, check out the User Guide page.

Features

  • View supported projects in the dashboard.
  • Start and stop dev mode.
  • Start dev mode with custom parameters.
  • Start dev mode in a container.
  • Start dev mode with the debugger attached.
  • Run tests.
  • View test reports.
  • Code with language assistance in the following configuration and application files:
    • server.xml, server.env, and bootstrap.properties Liberty configuration files
    • Jakarta EE 9.x APIs in Java files
    • MicroProfile APIs in microprofile-config.properties and Java files

The following screen captures demonstrate some of the Liberty Tools language assistance features.

Code completion in server.xml files helps you quickly edit your Liberty runtime configuration.

Liberty Config Language Server completion

Similar code assistance is provided for bootstrap.properties files (and server.env though not shown):

Liberty Config Language Server completion bootstrap.properties

Helpful code snippets are provided in Java files for Jakarta EE APIs such as Jakarta RESTful Web Services.

Eclipse LSP4Jakarta completion

Code completion for microprofile-config.properties files helps you easily set properties for MicroProfile APIs.

Eclipse LSP4MP completion

Editing assistance for configuration and application files is provided through the following language server projects, which this project consumes. For more information, see the documentation for these projects.

Action commands

Action command Description
Start Starts dev mode.
Start in container Starts dev mode with the server in a container.
Start... Opens the Run Configurations dialog to customize and run dev mode. You can find the supported parameters in the documentation for the dev goal of the Liberty Maven Plugin and the libertyDev task of the Liberty Gradle Plugin.
Debug Starts dev mode and attaches the debugger to the server JVM running the application.
Debug in container Starts dev mode with the server in a container and attaches the debugger to the JVM within the container.
Debug... Opens the Debug Configurations dialog to customize and run dev mode, and attaches the debugger to the server JVM that is running the application.
Stop Stops dev mode.
Run tests Runs the unit tests and integration tests that are configured for your project. This command requires that dev mode is already started.
View integration test report (Maven) Opens the integration test report file if it exists at /target/site/failsafe-report.html. This action command is only available to Maven projects.
View unit test report (Maven) Opens the unit test report file if it exists at /target/site/surefire-report.html. This action command is only available to Maven projects.
View test report (Gradle) Opens the test report file if it exists at the default location: build/reports/tests/test/index.html. This action command is available only to Gradle projects. Unlike Maven projects, Gradle projects have only a single action command for test result reporting.

Contributing

Contributions to the Liberty Tools for Eclipse IDE plugin are welcome!

Our CONTRIBUTING document contains details for setting up your development environment and submitting pull requests.

Issues

Please report bugs, issues and feature requests by creating a GitHub issue

liberty-tools-eclipse's People

Contributors

scottkurz avatar mezarin avatar awisniew90 avatar ajm01 avatar dmuelle avatar dmbelina avatar yeekangc avatar

Stargazers

Karsten Gresch avatar Samuel Dion avatar Juan Carlos Arguello avatar Nikheel avatar Ponzmild avatar  avatar Roberto::Gamarra [ icarus ] avatar RuiBai avatar Doug Breaux avatar  avatar Kathryn Kodama avatar

Watchers

James Cloos avatar Alasdair Nottingham avatar Chuck Bridgham avatar  avatar  avatar  avatar Trevor Crawford avatar Matt Bowersox avatar  avatar  avatar

liberty-tools-eclipse's Issues

feature.xml - require import stanza

currently feature.xml in liberty-mpls does not contain a requires-import stanza listing the mpls.jdt.core plugin (and others) but catagory.xml does specify a install repository for that plugin. (and others)

The liberty-mpls plugin does install and the required dependency plugins install as well form the update site built during the build.

Investigate if this is correct - or do we need an entry in feature.xml as well?

For snippet code gen via MP LS, fix template variables getting written into Java w/o substitution

When inserting snippet code via the MP LS snippet support, well known LS template vars supported by the MP LS in snippet code are not resolved and appear as is in the generated snippet code. These vars need to be resolved (probably via the underlying LS 4 Eclipse (LS4E) layer.

example - this liveness snippet insert:


import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Liveness;

import javax.enterprise.context.ApplicationScoped;

@Liveness
@ApplicationScoped
public class ${TM_FILENAME_BASE} implements HealthCheck {

	@Override
	public HealthCheckResponse call() {
		return HealthCheckResponse.named(${TM_FILENAME_BASE}.class.getSimpleName()).withData("live",true).up().build();
	}
}

${TM_FILENAME_BASE} is a LS template var that should be resolved to a value when inserted.

Considerations for project migrations

Consider what we should do for classic projects that work in Eclipse IDE and with classic Liberty Developer Tools. e.g., do we need to help migrate them over to be Maven or Gradle-based projects to work with dev mode and tools?

Populate"Liberty" projects on dashboard upon project import (configurator?)

From the IntelliJ design linked off OpenLiberty/open-liberty#14957 we see the design decision:
The Liberty tool window displays a list of Liberty projects in the current workspace with the Liberty Maven Plugin or Liberty Gradle plugin configured.

Another idea though, at least for Maven, would be to offer the dev mode tooling simply for any WAR module. That might have a neat side effect of emphasizing how easy it is to start using Open Liberty. We can discuss more.

Rework "Liberty nature" detection of Liberty projects to key off of server.xml presence

On dashboard open (or refresh), inspect all workspace projects and add Liberty Tools Nature:

  • IF projects has Maven nature (or pom.xml) or Gradle nature (or build.gradle)
    • AND project has src/main/liberty/config/server.xml
    • OR <subdir>/src/main/liberty/config/server.xml (for multi-module)

One downside of this scheme is that, for a multi-module project the child will be added to and the user will have to know to run from the parent.

NATURE

"Liberty Tools Nature" (name in "Project Natures" menu)
io.openliberty.tools.libertyToolsNature

ALSO

we should never remove the nature on refresh, in case the user has manually added it.

LS functionality should be available in the Java Editor within eclipse

Currently only a subset of LS functions appear to work when a file is opened in the Java Editor in eclipse. All LS functions work when a file is opened in the Generic Editor, however.

Need to understand why this is and ensure that all LS function is working when a java part is opened in the Java Editor.

Loading menu icon fails if JSF tagsupport bundle not present

We seem to have an undeclared prereq, in bundles/liberty/src/liberty/tools/ui/DashboardView.java where we do:
new URL("platform:/plugin/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/Composite/small/ACTIONSOURCE.gif"));

If the plugin isn't present we see a red square in place of the icon. Maybe we're loading in a non-OSGI-friendly way?

Investigate: remove intermediate env vars: MAVEN_HOME, M2_MAVEN, GRADLE_HOME unless they are truly standard

In DevModeOperations.java:

  • getGradleInstallHome()
  • getMavenInstallHome()
    we currently look for special env vars: MAVEN_HOME , M2_MAVEN, GRADLE_HOME.

Do we have any reference for treating these variables specially?

As far as I can tell they are not used in any special way by the Maven/Gradle tooling itself (as the Maven link shows M2_HOME was used until Maven 3.5).

If we are introducing these variables ourselves, essentially, we should remove them and just rely on PATH.

Use "recent editor tabs/windows" as context to connect hotkey command back to a particular project

At the Early Release level, you must have a single project selected before issuing a hotkey command, so our UI plugin can connect the command to a particular project (out of the full list present in the dashboard).

Perhaps we can scope the hotkey command to a particular project by somehow accessing recent tabs as context. (I haven't confirmed this is possible, so this needs an investigation to begin).

Terminal tab shows error on workspace restart

java.lang.NullPointerException
at java.base/java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
at liberty.tools.ui.terminal.ProjectTabController.getProjectConnector(ProjectTabController.java:130)
at liberty.tools.ui.terminal.LocalDevModeLauncherDelegate.createTerminalConnector(LocalDevModeLauncherDelegate.java:38)
at org.eclipse.tm.terminal.view.ui.services.TerminalService.createTerminalConnector(TerminalService.java:246)
at org.eclipse.tm.terminal.view.ui.services.TerminalService.executeServiceOperation(TerminalService.java:168)
at org.eclipse.tm.terminal.view.ui.services.TerminalService.openConsole(TerminalService.java:258)
at org.eclipse.tm.terminal.connector.local.launcher.LocalLauncherDelegate.execute(LocalLauncherDelegate.java:224)
at org.eclipse.tm.terminal.view.ui.view.TerminalsViewMementoHandler.restoreState(TerminalsViewMementoHandler.java:200)
at org.eclipse.tm.terminal.view.ui.view.TerminalsView.restoreState(TerminalsView.java:616)
at org.eclipse.tm.terminal.view.ui.view.TerminalsView.init(TerminalsView.java:338)
at org.eclipse.ui.internal.ViewReference.initialize(ViewReference.java:129)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:344)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:995)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:960)
at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:140)
at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:403)
at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:330)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:202)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:91)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:132)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:994)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:658)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:543)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:527)
at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:994)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:658)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1209)
at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:116)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:150)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:150)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82)
at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:116)
at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:150)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:658)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1078)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1041)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
at org.eclipse.ui.internal.Workbench$$Lambda$190/0000000000000000.run(Unknown Source)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
at org.eclipse.equinox.launcher.Main.main(Main.java:1440)

Rename/refactor packages and XML identifiers to use 'io.openliberty.tools.eclipse' prefix

First, the feature name should simply be "Liberty Tools" and the category should be "Liberty Tools" as well.

An additional list of parts to change:

  1. OSGi bundle manifests:
  • UI Bundle - io.openliberty.tools.eclipse.ui
  • Language Server Bundle - io.openliberty.tools.eclipse.lsp4e
  1. Other Eclipse installable feature files like feature.xml, category.xml
  2. plugin.xml extension id(s), e.g. key commandId="liberty.commands.open.dashboard"
  3. pom.xml groupid (even though I'm not sure which if any of these artifacts need to go to Maven Central).
  4. Finally we should also change the package prefix and filenames of Java parts

I did the feature rename plus some of 1,2,4 (though none of 3.) in https://github.com/scottkurz/liberty-dev-tools-eclipse/tree/name-versions
e..g see:
58678dd?w=1
and the second commit which renames the feature file

Also note in this branch the convention needed to have Tycho release a non-snapshot version

Construct feature installation for early release

  • 1. It should include
    • Liberty dev dashboard
    • lsp4mp release content
  • 2. We should have naming & versioning with some level of socialization, internally at least
  • 3. Provide Eclipse Marketplace Client info
  • 4. Import mpls.jdt.core plugin
  • 5. prereq the Wild Web Developer Tools (not sure how this is enforced)
  • 6. prereq the lsp4e.jdt plugin

Slow response when stop is issued during early startup

Is the purpose of 'stop' is to stop cleanly with the 'q' rather than Ctrl+C ? Or is the purpose just to stop as quickly as possible?
E.g. from a regular terminal, 'q' is quicker than Ctrl+C..since for the latter, I need to hit 'Y' to another prompt (are you sure you want to cancel).
On my windows shell at least I get:

INFO: Server defaultServer stopped.
Terminate batch job (Y/N)?

However.. I can only issue 'q' once dev mode reaches the point where it's listening for this. With Ctrl+C, OTOH, I can cancel at any time.. even "early" before dev mode is listening.
Would there be any value in implementing "stop" more like Ctrl+C plus answering 'Y'? Something to think about.

Behavior on command menu selection after more than one project has been selected is unclear.

If I select >1 project like here:
image

and do "Start" then what should happen?

When I've tried this I seem to always take the action on the first (top-most) project.

But what SHOULD happen? Should I not be allowed to select more than one?

Taking the action on the top project isn't a horrible behavior, if we are indeed reliably doing this.

But an even more natural behavior would probably be to take the action on EACH project one at a time.

Provide user a collapsed view of the src/main/liberty/config folder holding server.xml

Instead of having to navigate thru the dir structure to get to the well-known location: src/main/liberty/config it should be collapsed for me, at least in certain views like maybe Enterprise Explorer?

Note this could be accomplished via:

  1. Adding this to the .classpath file: classpathentry excluding="**" kind="src" output="target/liberty/wlp/usr/servers/defaultServer" path="src/main/liberty/config"/>
  2. -> New -> Source Folder -> src/main/liberty/config Could 1. possibly be worth adding to the starter (generating the whole .classpath just for this?) Seems maybe less than desirable. I wonder if there's a better way.

Clean up liberty-maven-test-app/.project from test run?

The .project file is created on import during the test run.

To the extent the test is supposed to verify the creation with the Liberty nature, the fact that it's left behind means subsequent executions in-place aren't verifying the exact same thing (though a clean run in CI certainly would).

This has a miniscule chance of causing much of a real problem. But I think it's valuable to think more about test lifecycle and what we are and aren't assuming about test preconditions...so leaving this open to think about at least.

Maybe the file should be deleted before the test runs start.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.