GithubHelp home page GithubHelp logo

renatoathaydes / osgi-run Goto Github PK

View Code? Open in Web Editor NEW
54.0 12.0 13.0 660 KB

Osgi-Run - A Gradle plugin to make the development of modular applications using OSGi completely painless

License: Apache License 2.0

Groovy 69.69% Java 29.98% Shell 0.33%
osgi osgi-environment gradle-plugin java

osgi-run's Issues

[feature request] run any time any osgi container with runOsgiFelix, runOsgiEquinox, runOsgiKnopflerfish - please vote

[feature request] please vote with 👍 from the top right menu

run any time any osgi container with runOsgiFelix, runOsgiEquinox, runOsgiKnopflerfish

Currently this plugin makes a great job to run one of 3 major OSGi containers.
However what container to run is written inside build.gradle. To try other container user have to change.

What if user could run any time any osgi container with gradle runOsgiFelix, gradle runOsgiEquinox, gradle runOsgiKnopflerfish

That would still require some preferences inside build.gradle, but they may look similar to

runOsgi {
    felix{
    }
    equinox{
        configSettings = 'equinox'            // use Equinox's config file instead of Felix's
        osgiMain = 'org.eclipse.osgi:org.eclipse.osgi:3.7.1' // use a specific version of Equinox
        javaArgs = '-DmyProp=someValue'       // pass some args to the Java process
        programArgs = '-console'              // pass some arguments to the Equinox starter
    }
    bundles += allprojects.toList() + IPOJO_BUNDLE // bundles are: this project + subprojects + IPojo
    config += [ 'osgi.clean': true ]      // add properties to the Equinox config
    outDir = 'runtime'                    // the environment will be built at "${project.buildDir}/runtime"
    copyManifestTo file( 'auto-generated/MANIFEST.MF' ) // make the manifest visible to the IDE for OSGi support
}

that is additional preferences not to runOsgi, but specific container option.

then there can be runOsgi.default = felix (or runOsgi { felix { default = true ...) to specify for use with $ gradle runOsgi

Other configuration than @start for equinox bundles

Hello,

OsgiRuntimeTaskCreator.groovy:140 always creates equinox configs with all bundles set to "..:@start". This will result in ugly exceptions when trying to start fragment bundles, or even prevent configurations from running properly when bundles are required to be installed, but not started.

Is there any way to write configs with bundles not set to "..@start"?

Thank you!

The compilation fails.

  • What went wrong:
    Task 'install' not found in root project 'osgi-run-core'.

the stacktrace is:

FAILURE: Build failed with an exception.

Repetitive executions of the "runOsgi" task fail

Repetitive executions of the "runOsgi" task fail with an:

Execution failed for task ':runOsgi'.
> None of the osgiMain jars [[]] contain a Main-Class in its Manifest.
  Please specify a runnable jar as a osgiMain dependency or the osgiMain property.

./gradlew cleanOsgiRuntime runOsgi works fine.

plugins {
    id "com.athaydes.osgi-run" version "1.5.0"
}
$ ./gradlew --version
------------------------------------------------------------
Gradle 2.4
------------------------------------------------------------
Build time:   2015-05-05 08:09:24 UTC
Build number: none
Revision:     5c9c3bc20ca1c281ac7972643f1e2d190f2c943c

Groovy:       2.3.10
Ant:          Apache Ant(TM) version 1.9.4 compiled on April 29 2014
JVM:          1.8.0_101 (Oracle Corporation 25.101-b13)
OS:           Linux 4.4.0-38-generic amd64
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':runOsgi'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:310)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:90)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
    at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:50)
    at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:27)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:40)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:169)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
Caused by: org.gradle.api.GradleException: None of the osgiMain jars [[]] contain a Main-Class in its Manifest.
Please specify a runnable jar as a osgiMain dependency or the osgiMain property.
    at com.athaydes.gradle.osgi.OsgiRuntimeTaskCreator.selectMainClass(OsgiRuntimeTaskCreator.groovy:105)
    at com.athaydes.gradle.osgi.OsgiRuntimeTaskCreator$selectMainClass$1.callStatic(Unknown Source)
    at com.athaydes.gradle.osgi.OsgiRunner.run(OsgiRunner.groovy:19)
    at com.athaydes.gradle.osgi.OsgiRunner$run.call(Unknown Source)
    at com.athaydes.gradle.osgi.OsgiRunPlugin$_runOsgiTask_closure5.doCall(OsgiRunPlugin.groovy:95)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:558)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:539)
    at org.gradle.api.internal.tasks.TaskMutator$1.execute(TaskMutator.java:77)
    at org.gradle.api.internal.tasks.TaskMutator$1.execute(TaskMutator.java:73)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 49 more

Cannot execute runOSGI task under gradle 7.3.3

When I try, I get the following errors:

Problem creating boot delegation class loader: java.lang.reflect.InaccessibleObjectException: Unable to make protected java.security.SecureClassLoader(java.lang.ClassLoader) accessible: module java.base does not "opens java.security" to unnamed module @2957fcb0
org.osgi.framework.BundleException: Unable to resolve jline [1](R 1.0): missing requirement [jline [1](R 1.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.5)) Unresolved requirements: [[jline [1](R 1.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.5))]
ERROR: Bundle jline [1] Error starting file:/home/angle/Documents/Programming/Java/OSGIGradleSandbox/build/osgi/bundle/jline-2.14.2.jar (org.osgi.framework.BundleException: Unable to resolve jline [1](R 1.0): missing requirement [jline [1](R 1.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.5)) Unresolved requirements: [[jline [1](R 1.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.5))])
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4148)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2118)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1372)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:833)
org.osgi.framework.BundleException: Unable to resolve org.apache.felix.scr [2](R 2.0): missing requirement [org.apache.felix.scr [2](R 2.0)] osgi.ee; (|(&(osgi.ee=JavaSE)(version=1.6))(&(osgi.ee=JavaSE/compact1)(version=1.8))) Unresolved requirements: [[org.apache.felix.scr [2](R 2.0)] osgi.ee; (|(&(osgi.ee=JavaSE)(version=1.6))(&(osgi.ee=JavaSE/compact1)(version=1.8)))]
ERROR: Bundle org.apache.felix.scr [2] Error starting file:/home/angle/Documents/Programming/Java/OSGIGradleSandbox/build/osgi/bundle/org.apache.felix.scr-2.0.12.jar (org.osgi.framework.BundleException: Unable to resolve org.apache.felix.scr [2](R 2.0): missing requirement [org.apache.felix.scr [2](R 2.0)] osgi.ee; (|(&(osgi.ee=JavaSE)(version=1.6))(&(osgi.ee=JavaSE/compact1)(version=1.8))) Unresolved requirements: [[org.apache.felix.scr [2](R 2.0)] osgi.ee; (|(&(osgi.ee=JavaSE)(version=1.6))(&(osgi.ee=JavaSE/compact1)(version=1.8)))])
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4148)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2118)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1372)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:833)
org.osgi.framework.BundleException: Unable to resolve com.athaydes.osgiaas.cli-api [4](R 4.0): missing requirement [com.athaydes.osgiaas.cli-api [4](R 4.0)] osgi.wiring.package; (osgi.wiring.package=javax.annotation) Unresolved requirements: [[com.athaydes.osgiaas.cli-api [4](R 4.0)] osgi.wiring.package; (osgi.wiring.package=javax.annotation)]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4148)
ERROR: Bundle com.athaydes.osgiaas.cli-api [4] Error starting file:/home/angle/Documents/Programming/Java/OSGIGradleSandbox/build/osgi/bundle/osgiaas-cli-api-0.7.jar (org.osgi.framework.BundleException: Unable to resolve com.athaydes.osgiaas.cli-api [4](R 4.0): missing requirement [com.athaydes.osgiaas.cli-api [4](R 4.0)] osgi.wiring.package; (osgi.wiring.package=javax.annotation) Unresolved requirements: [[com.athaydes.osgiaas.cli-api [4](R 4.0)] osgi.wiring.package; (osgi.wiring.package=javax.annotation)])
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2118)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1372)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:833)
ERROR: Bundle com.athaydes.osgiaas.cli-core [5] Error starting file:/home/angle/Documents/Programming/Java/OSGIGradleSandbox/build/osgi/bundle/osgiaas-cli-core-0.7.jar (org.osgi.framework.BundleException: Unable to resolve com.athaydes.osgiaas.cli-core [5](R 5.0): missing requirement [com.athaydes.osgiaas.cli-core [5](R 5.0)] osgi.wiring.package; (&(osgi.wiring.package=com.athaydes.osgiaas.api.env)(version>=0.7.0)(!(version>=1.0.0))) [caused by: Unable to resolve com.athaydes.osgiaas.common [6](R 6.0): missing requirement [com.athaydes.osgiaas.common [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.annotation)] Unresolved requirements: [[com.athaydes.osgiaas.cli-core [5](R 5.0)] osgi.wiring.package; (&(osgi.wiring.package=com.athaydes.osgiaas.api.env)(version>=0.7.0)(!(version>=1.0.0)))])
org.osgi.framework.BundleException: Unable to resolve com.athaydes.osgiaas.cli-core [5](R 5.0): missing requirement [com.athaydes.osgiaas.cli-core [5](R 5.0)] osgi.wiring.package; (&(osgi.wiring.package=com.athaydes.osgiaas.api.env)(version>=0.7.0)(!(version>=1.0.0))) [caused by: Unable to resolve com.athaydes.osgiaas.common [6](R 6.0): missing requirement [com.athaydes.osgiaas.common [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.annotation)] Unresolved requirements: [[com.athaydes.osgiaas.cli-core [5](R 5.0)] osgi.wiring.package; (&(osgi.wiring.package=com.athaydes.osgiaas.api.env)(version>=0.7.0)(!(version>=1.0.0)))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4148)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2118)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1372)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:833)
ERROR: Bundle com.athaydes.osgiaas.common [6] Error starting file:/home/angle/Documents/Programming/Java/OSGIGradleSandbox/build/osgi/bundle/osgiaas-common-0.7.jar (org.osgi.framework.BundleException: Unable to resolve com.athaydes.osgiaas.common [6](R 6.0): missing requirement [com.athaydes.osgiaas.common [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.annotation) Unresolved requirements: [[com.athaydes.osgiaas.common [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.annotation)])
org.osgi.framework.BundleException: Unable to resolve com.athaydes.osgiaas.common [6](R 6.0): missing requirement [com.athaydes.osgiaas.common [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.annotation) Unresolved requirements: [[com.athaydes.osgiaas.common [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.annotation)]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4148)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2118)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1372)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:833)
> Task :runOsgi

This is without adding any bundle to the project, and only using the default osgiRuntime.

Relative bundle paths (Equinox)

Hello,

I am using createOsgiRuntime to generate an Equinox config, which works perfectly well. However, in the generated config.ini, bundles are given by absolute paths which makes it impossible to run the generated config from anywhere else then from target dir.

Bundles should be referred to by paths relative to the OSGi root. Does anything speak against replacing

        def bundleJars = new FileNameByRegexFinder().getFileNames(
                bundlesDir.absolutePath, /.+\.jar/ )

by

        def bundleJars = new FileNameByRegexFinder().getFileNames(
                new File(${osgiConfig.bundlesPath}").path, /.+\.jar/ )

in OsgiRuntimeTaskCreator.groovy:138 ?

Exclude bundles from osgiRuntime

Hi
Is it possible to instruct osgi-run to not install some bundles in started OSGi container? I have a big dependency tree with some packages not needed actually, but calculated as necessary.

Provided dependencies

How to exclude some dependencies / ensure that it will be not wrapped?

I included some compile dependency which is dependant of slfj-api. Dependency is being automatically wrapped and deployed as bundle.

But in one of my projects, I also want to use slf4j, and I added compile dependency to it. After that I have two bundles slf4j deployed on instance. How to prevent such situation?

OSGi DS Annotations

Firstly, I'm loving this plug-in, thank you! I'm having some trouble figuring out how to properly use DS Annotations. Felix SCR annotations are now deprecated in favor of the actual OSGi ones. It would be great if we could annotate our classes and it automatically be picked up by osgi-run ds plug-in, as opposed to declaring them in the build.gradle or elsewhere. Are you aware of which dependencies are needed (without the osgi-run ds plug-in) to properly do DS annotations?

-Charlie

Remove dependency on the Gradle OSGi Plugin

Including the Gradle OSGi Plugin automatically was a decision that made sense when there was only one Gradle plugin for OSGi and to make it a tiny little bit easier for developers to use osgi-run (as they cannot forget to make their jars into bundles this way).

However, the Gradle OSGi Plugin only uses Bnd to create a manifest, not to modify the jar in any other way that is supported by Bnd, such as including nested jars (see #32 ), so this dependency on the Gradle OSGi Plugin is causing more damage than good for some users.

Removing this dependency should be really easy anyway.. Current users who don't explicitly declare apply plugin: 'osgi' just need to add this line to their build files and everything will work as before.

[examples] quartz-sample fails when swithcing to 'org.dm.bundle' plugin

in quartz-sample-nested-jars example:

https://github.com/paulvi/osgi-run/tree/master/osgi-run-test/quartz-sample-nested-jars

there's error, so resulted bundle is not ACTIVE in felix, and can't be started.

full log

# parseClassFile(): path=org/xml/sax/ErrorHandler.class resource=:file:/C:/Program%20Files/Java/jdk1.8.0_74/jre/lib/rt.j
ar!/org/xml/sax/ErrorHandler.class:
:quartz-sample-nested-jars:createOsgiRuntime
> Building 83% > :quartz-sample-nested-jars:runOsgi

:quartz-sample-nested-jars:runOsgi
org.osgi.framework.BundleException: Unable to resolve com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0): mis
sing requirement [com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.package; (osgi.wiring.packa
ge=commonj.work) Unresolved requirements: [[com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.p
ackage; (osgi.wiring.package=commonj.work)]
ERROR: Bundle com.athaydes.gradle.osgi.quartz-sample-nested-jars [6] Error starting file:/D:/Workspaces/GitHub/osgi-run/
osgi-run-test/quartz-sample-nested-jars/build/osgi/bundle/quartz-sample-nested-jars-1.0.jar (org.osgi.framework.BundleEx
ception: Unable to resolve com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0): missing requirement [com.athay
des.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=commonj.work) Unresolved
 requirements: [[com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.package; (osgi.wiring.packag
e=commonj.work)])
        at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
        at java.lang.Thread.run(Thread.java:745)
____________________________
Welcome to Apache Felix Gogo

> Building 83% > :quartz-sample-nested-jars:runOsgilb
g! g! g! START LEVEL 1
   ID|State      |Level|Name
    0|Active     |    0|System Bundle (5.4.0)|5.4.0
    1|Active     |    1|c3p0 (0.9.1.1)|0.9.1.1
    2|Active     |    1|Apache Felix Gogo Command (0.16.0)|0.16.0
    3|Active     |    1|Apache Felix Gogo Runtime (0.16.2)|0.16.2
    4|Active     |    1|Apache Felix Gogo Shell (0.12.0)|0.12.0
    5|Active     |    1|quartz (2.2.1)|2.2.1
    6|Installed  |    1|com.athaydes.gradle.osgi.quartz-sample-nested-jars (1.0.0)|1.0.0
    7|Active     |    1|slf4j-api (1.6.6)|1.6.6
    8|Resolved   |    1|slf4j-simple (1.6.6)|1.6.6
> Building 83% > :quartz-sample-nested-jars:runOsgistart 6
org.osgi.framework.BundleException: Unable to resolve com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0): mis
sing requirement [com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.package; (osgi.wiring.packa
ge=commonj.work) Unresolved requirements: [[com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.p
ackage; (osgi.wiring.package=commonj.work)]
> Building 83% > :quartz-sample-nested-jars:runOsgi

ref #32 , TomDmitriev/gradle-bundle-plugin#54
@TomDmitriev @rotty3000

My TODO is raise on stackoverflow.com

`apply` line in README is missing `plugin: `

About the "Quick Start" section.

I couldn't make it work until I added plugin:. Here is a minimal example of osgi-run for Equinoxe:

buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    classpath "com.athaydes.gradle.osgi:osgi-run-core:1.0"
  }
}

apply plugin: 'osgi-run'

repositories {
  mavenCentral()
}

runOsgi {
  osgiMain = EQUINOX
  bundles = subprojects
  javaArgs = '-console'
  configSettings = 'equinox'
  bundlesPath = 'plugins'
}

task wrapper(type: Wrapper) {
  gradleVersion = '2.1'
}

ipojo-plugin: Upload version 1.1 to Bintray

The current version of ipojo-plugin is 1.0 on Bintray and therefore doesn't include commit 0b2b7bb, which fixes a bug that prevents rebuilding without removing the existing generated bundle. ipojo-plugin 1.1 should be made available to fix this issue.

Split task to copy OSGi bundles to bundlesPath from createOsgiRuntime

It might be useful to run a task to just copy all runtime bundles to a specific directory, without creating a full runtime (with system libs, the system bundle, run scripts etc).

This can be easily done by moving some functionality from the createOsgiRuntime task into a new task, say createOsgiBundlesDir.

Bundle all "compile" dependencies into a fat jar bundle

Is it possible to build a fat jar with all transitive dependencies (conflicts resolved similar to maven), and select just the packages that I need to export for my plugin architecture?
No matter what I try, I always get in trouble with dependency resolution, last one was about "Invalid syntax for version" when generating the manifest for "raml-parser-2".
I will rather prefer to build a core bundle with all that I need, and skip this bunch of problems. I know this is not very good OSGi paradigm, I don't care!

Equinox cannot find the plugins directory on startup

It looks like since the OSGi container jars were moved to system-libs in the 1.5.0 version, Equinox no longer can find the plugins directory without extra configuration because it looks like it expects that directory to be somewhere else.

Help welcome with this one as I don't know much about Equinox.

[examples] generated-sources/MANIFEST.MF in one line (but is OK inside .jar bundle)

generated-sources/MANIFEST.MF in build-with-subprojects has only

Manifest-Version: 1.0


This is possibly issue of org.dm.bundle project or snippets below needs to be changed

afterEvaluate { project ->
    project.jar.doLast {
        project.jar.manifest.writeTo( project.file( 'generated-sources/MANIFEST.MF' ) )
    }
}

vs

jar {
}.doLast {
    // copy manifest to location where the IDE can use it to let us know when we breach OSGi restrictions!
    jar.manifest.writeTo( project.file( 'generated-sources/MANIFEST.MF' ) )
}

Don't remove Wrap Instruction after match

When the manifest of a "wrapInstruction" matches a file pattern, the instruction is removed from the config:

BndWrapper.groovy

  Map<String, Object[]> config = getWrapConfig( wrapInstructions, jarFile )
        def consumeValue = { String key ->
            Object[] items = config.remove( key )
            if ( items ) items.join( ',' )
            else null
        }

Hence, the instruction is not applied to subsequent jar files, matching the pattern. E.g.

runOsgi {
  bundles += subprojects

  wrapInstructions {
      manifest( ~/.*/ ) {
          instruction 'Import-Package', '!org.scalatest*', '!org.scalacheck*', '!org.specs*','*'
      }
  }
}

is only applied to the first match.

Cannot override manifest headers

I am using your plugin to build my bundles but when I try to override manifest header, then incorrect value is being generated:


jar {
    manifest {
        instruction 'Bundle-Name', project.description
        instruction 'Bundle-SymbolicName', 'adm'
        instruction 'Private-Package', "com.mypackage.adm.api.*;version=${project.version}"
    }
}

MANIFEST.mf

Bundle-SymbolicName: com.mypackage.adm,adm

expected:

Bundle-SymbolicName: adm

Generate source bundles for eclipse/equinox

It would be nice when equinox is used in case there are no source bundles available (i.e. when wrapping or it was not uploaded to the repository) those bundles were generated. In Maven, this is done something like this, while for gradle it is probably looks like '-sources': true in this.
Thanks for considering it.

gradle arguments are not visible within runOsgi block / configSettings = 'equinox' is overwritten

While trying #37 (comment)

all

gradle -Dequinox=true runOsgi 
gradle -Dequinox runOsgi 
gradle -Pequinox runOsgi 
gradle runOsgi -Pequinox

did not work

if (hasProperty('equinox')) {
    println 'equinox'
}

runOsgi {
    // https://github.com/renatoathaydes/osgi-run/issues/37 
    // run any with
    // gradle -Dequinox=true runOsgi
    if (hasProperty('equinox')) {
        configSettings = 'equinox'
        osgiMain = 'org.eclipse.osgi:org.eclipse.osgi:3.7.1'
        javaArgs = '-DmyProp=someValue'
        programArgs = '-console'
        config += [ 'osgi.clean': true ]      // add properties to the Equinox config
    } else {  // use felix, which is already the default
        // maybe specify which felix version to use here...    
    }

    bundles += subprojects
    config += [ 'org.osgi.framework.storage.clean': 'onFirstInit' ]
}

It always launches Felix

D:\Workspaces\Enide-2015-7\osgi-run-my>gradle runOsgi -Pequinox
equinox
:build-with-subprojects:my-api:compileJava UP-TO-DATE
:build-with-subprojects:my-api:processResources UP-TO-DATE
:build-with-subprojects:my-api:classes UP-TO-DATE
:build-with-subprojects:my-api:jar UP-TO-DATE
:build-with-subprojects:my-consumer:compileJava UP-TO-DATE
:build-with-subprojects:my-consumer:compileGroovy UP-TO-DATE
:build-with-subprojects:my-consumer:processResources UP-TO-DATE
:build-with-subprojects:my-consumer:classes UP-TO-DATE
:build-with-subprojects:my-consumer:jar UP-TO-DATE
:build-with-subprojects:my-impl:compileJava UP-TO-DATE
:build-with-subprojects:my-impl:compileGroovy UP-TO-DATE
:build-with-subprojects:my-impl:processResources UP-TO-DATE
:build-with-subprojects:my-impl:classes UP-TO-DATE
:build-with-subprojects:my-impl:jar UP-TO-DATE
:build-with-subprojects:createOsgiRuntime
:build-with-subprojects:runOsgi
Started MyConsumer
Got service ref null
Detected registration of a Service!
Got service with message: This is a MyService implementation of class com.athaydes.myimpl.MyServiceImpl
Exported MyService implementation
____________________________
Welcome to Apache Felix Gogo

> Building 93% > :build-with-subprojects:runOsgi

Jars which do not have any OSGi metadata should not be deployed

Currently, transitive dependencies get deployed to the bundle folder.

But if there is not OSGi metadata, it seems it is pointless to do it unless the jars are wrapped into bundles exporting everything they have. Maybe this should be an option for users to decide whether to enable or not (so that it can be really easy to get anything at all into an OSGi environment).

Object[]'s toString() used in wrapping

In this build.gradle I am generating OSGi manifests for both the rsyntaxtextarea and its autocomplete. Unfortunately when I tried to change the org.fife.ui symbolic name of RSyntaxTextArea, I got symbolic name like: [Ljava.lang.Object;@69c8b868.

When I tried similar thing to change the version of things to wrap, I got also a toString of an Object array (so I had to find already OSGified versions of it).

Improved version computation

For the com.thoughtworks.xstream:xstream:1.4.7 dependency there is an xpp3:xpp3_min:1.1.4c dependency, which cannot be wrapped, because the 1.1.4c is not an OSGi version format and the bnd tool fails with an exception. (Similarly to the org.apache.poi:poi-ooxml-schemas:3.10-FINAL dependency, 3.10-FINAL is not a valid OSGi version number, so bnd fails.) It would be nice if these kind of version numbers were automatically converted to an OSGi format, like 1.1.4.c or 3.10.0.FINAL.
Thanks for this great tool.

Cannot use a Jar file dependency as a OSGi bundle

When doing:

runOsgi {
    bundles = [ files(myDirWithJar) ]
}

An Exception is thrown because the plugin tries to configure the dependency (with "transitive" and "exclusions").

The plugin should only do that for bundles that are of type Dependency.

default console configuration for Equinox

Just by chance ran into http://stackoverflow.com/questions/25733843/how-to-start-osgi-console, that gave me answer why possible I could not run one of my first examples against Equinox

The solution is pasted below. Can this be default e.g. for #37 run-any

Make a run folder that would look like:

  • somedir/
    • configuration/
      • config.ini
    • org.eclipse.osgi.jar
    • org.eclipse.equinox.console.jar
    • org.apache.felix.gogo.shell.jar
    • org.apache.felix.gogo.command.jar
    • org.apache.felix.gogo.runtime.jar

Then edit config.ini as:

osgi.bundles=org.apache.felix.gogo.runtime@start, org.apache.felix.gogo.command@start, org.apache.felix.gogo.shell@start, org.eclipse.equinox.console@start

After done this, run java -jar org.eclipse.osgi.jar -console in your command line and the osgi console will start.

multiline javaArgs breaks run.sh script

example build.gradle fragment:

runOsgi {
    [...]
    javaArgs = '''
        -Djersey=true
        -Dosgi.clean=true 
    ''''

works for ./gradlew runOsgi but run.sh script looks like this:

[...]
"$JAVA"
                -Djersey=true
                -Dosgi.clean=true 
         -jar org.apache.felix.main-5.4.0.jar  "$@"

There should be '' at line ends.

Getting a 'Cannot read Declarative Services declarations from null' error

Environment:

  • Windows 10
  • Intellij
  • Gradle 6.6.1
  • Groovy 2.5.12
  • In build.gradle, added the following in the plugins block: id "com.athaydes.osgi-ds" version "1.3.1"

Running gradlew.bat build, and getting the following error:
Execution failed for task ':example:jar'.

Cannot read Declarative Services declarations from null

Would appreciate any help in understanding this.
(BTW, my goal is to make my jar an OSGI bundle. The native gradle osgi plugin was removed, so I wanted to use your plugin instead. If your plugin is not a substitute for the native plugin, can you please let me know which plugin would be relevant?).

Thanks!

NoSuchMethodError for "createOsgiRuntime" task

"createOsgiRuntime" task failes with NoSuchMethodError. Works with 1.5.0.

plugins {
    id "com.athaydes.osgi-run" version "1.5.1"
}
$ ./gradlew --version
------------------------------------------------------------
Gradle 2.4
------------------------------------------------------------
Build time:   2015-05-05 08:09:24 UTC
Build number: none
Revision:     5c9c3bc20ca1c281ac7972643f1e2d190f2c943c

Groovy:       2.3.10
Ant:          Apache Ant(TM) version 1.9.4 compiled on April 29 2014
JVM:          1.8.0_101 (Oracle Corporation 25.101-b13)
OS:           Linux 4.4.0-38-generic amd64
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':createOsgiRuntime'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:310)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:90)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
    at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:50)
    at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:27)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:40)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:169)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
Caused by: java.lang.NoSuchMethodError: org.codehaus.groovy.runtime.StringGroovyMethods.find(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
    at com.athaydes.gradle.osgi.util.FileNameUtils.versionFrom(FileNameUtils.groovy:11)
    at com.athaydes.gradle.osgi.util.FileNameUtils$versionFrom.call(Unknown Source)
    at com.athaydes.gradle.osgi.util.JarUtils.versionOf(JarUtils.groovy:108)
    at com.athaydes.gradle.osgi.util.JarUtils$versionOf$3.call(Unknown Source)
    at com.athaydes.gradle.osgi.bnd.BndWrapper.wrapNonBundle(BndWrapper.groovy:39)
    at com.athaydes.gradle.osgi.OsgiRuntimeTaskCreator$_copyBundles_closure13.doCall(OsgiRuntimeTaskCreator.groovy:183)
    at com.athaydes.gradle.osgi.OsgiRuntimeTaskCreator.copyBundles(OsgiRuntimeTaskCreator.groovy:180)
    at com.athaydes.gradle.osgi.OsgiRuntimeTaskCreator$_createOsgiRuntimeTask_closure1.doCall(OsgiRuntimeTaskCreator.groovy:35)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:558)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:539)
    at org.gradle.api.internal.tasks.TaskMutator$1.execute(TaskMutator.java:77)
    at org.gradle.api.internal.tasks.TaskMutator$1.execute(TaskMutator.java:73)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 49 more

[Gradle 3.0 support] Caused by: org.gradle.api.artifacts.UnknownConfigurationException: Configuration with name '__osgiRuntime__0' not found.

I'm receiving the following error. I have previously used osgi-run successfully, but recently I've run into this problem. I'm currently running Gradle 3.0 with a simple root project. Any help would be greatly appreciated.

org.gradle.tooling.BuildException: Could not run build action using Gradle installation '/home/georgec/Programs/gradle-3.0'. at org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:59) at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:57) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:46) at org.gradle.tooling.internal.consumer.DefaultBuildActionExecuter.run(DefaultBuildActionExecuter.java:47) at org.netbeans.gradle.model.GenericModelFetcher.getModels(GenericModelFetcher.java:166) at org.netbeans.gradle.project.model.NbGradle18ModelLoader$ProjectModelFetcher.getModels(NbGradle18ModelLoader.java:371) at org.netbeans.gradle.project.model.NbGradle18ModelLoader.loadModels(NbGradle18ModelLoader.java:69) at org.netbeans.gradle.project.model.GradleModelLoader.loadModelWithProgress(GradleModelLoader.java:566) at org.netbeans.gradle.project.model.GradleModelLoader.access$800(GradleModelLoader.java:71) at org.netbeans.gradle.project.model.GradleModelLoader$6.run(GradleModelLoader.java:396) at org.netbeans.gradle.project.tasks.GradleDaemonManager.runNonBlockingGradleTask(GradleDaemonManager.java:35) at org.netbeans.gradle.project.tasks.GradleDaemonManager.access$100(GradleDaemonManager.java:22) at org.netbeans.gradle.project.tasks.GradleDaemonManager$2.execute(GradleDaemonManager.java:125) at org.jtrim.concurrent.AbstractTaskExecutorService$FunctionWrapper.execute(AbstractTaskExecutorService.java:270) at org.jtrim.concurrent.AbstractTaskExecutorService$TaskOfAbstractExecutor.execute(AbstractTaskExecutorService.java:340) at org.jtrim.concurrent.Tasks$RunOnceCancelableTask.execute(Tasks.java:342) at org.jtrim.concurrent.SingleThreadedExecutor$QueuedItem.runTask(SingleThreadedExecutor.java:919) at org.jtrim.concurrent.SingleThreadedExecutor$QueuedItem.access$1200(SingleThreadedExecutor.java:898) at org.jtrim.concurrent.SingleThreadedExecutor$Impl$Worker.executeTask(SingleThreadedExecutor.java:815) at org.jtrim.concurrent.SingleThreadedExecutor$Impl$Worker.processQueue(SingleThreadedExecutor.java:827) at org.jtrim.concurrent.SingleThreadedExecutor$Impl$Worker.run(SingleThreadedExecutor.java:861) at org.jtrim.concurrent.SingleThreadedExecutor$Impl$1.run(SingleThreadedExecutor.java:453) at java.lang.Thread.run(Thread.java:745) Caused by: org.gradle.internal.exceptions.LocationAwareException: A problem occurred configuring root project 'CAMP'. at org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:74) at org.gradle.initialization.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:47) at org.gradle.initialization.StackTraceSanitizingExceptionAnalyser.transform(StackTraceSanitizingExceptionAnalyser.java:30) at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:100) at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92) at org.gradle.initialization.DefaultGradleLauncher.getBuildAnalysis(DefaultGradleLauncher.java:88) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.configure(InProcessBuildActionExecuter.java:102) at org.gradle.tooling.internal.provider.runner.ClientProvidedBuildActionRunner.run(ClientProvidedBuildActionRunner.java:45) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:58) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28) at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:82) at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:49) at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:59) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:49) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72) at org.gradle.util.Swapper.swap(Swapper.java:38) at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.HintGCAfterBuild.execute(HintGCAfterBuild.java:44) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50) at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:240) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'CAMP'. at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:79) at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:74) at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:61) at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:573) at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:125) at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:42) at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:38) at org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:124) at org.gradle.internal.Factories$1.create(Factories.java:22) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:121) at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32) at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98) ... 42 more Caused by: org.gradle.api.artifacts.UnknownConfigurationException: Configuration with name '__osgiRuntime__0' not found. at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.createNotFoundException(DefaultConfigurationContainer.java:92) at org.gradle.api.internal.DefaultNamedDomainObjectCollection.getByName(DefaultNamedDomainObjectCollection.java:229) at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.getByName(DefaultConfigurationContainer.java:82) at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.getByName(DefaultConfigurationContainer.java:37) at org.gradle.api.internal.DefaultNamedDomainObjectCollection.getAt(DefaultNamedDomainObjectCollection.java:241) at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.getAt(DefaultConfigurationContainer.java:37) at org.gradle.api.artifacts.ConfigurationContainer$getAt.call(Unknown Source) at com.athaydes.gradle.osgi.ConfigurationsCreator$_configBundles_closure1$_closure3.doCall(ConfigurationsCreator.groovy:21) at com.athaydes.gradle.osgi.ConfigurationsCreator$_configBundles_closure1.doCall(ConfigurationsCreator.groovy:20) at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:70) at org.gradle.util.ConfigureUtil.configureTarget(ConfigureUtil.java:160) at org.gradle.util.ConfigureUtil.configureSelf(ConfigureUtil.java:148) at org.gradle.api.internal.AbstractNamedDomainObjectContainer.configure(AbstractNamedDomainObjectContainer.java:74) at org.gradle.api.internal.AbstractNamedDomainObjectContainer.configure(AbstractNamedDomainObjectContainer.java:29) at org.gradle.api.internal.project.DefaultProject.configurations(DefaultProject.java:932) at org.gradle.api.Project$configurations$3.call(Unknown Source) at com.athaydes.gradle.osgi.ConfigurationsCreator.configBundles(ConfigurationsCreator.groovy:18) at com.athaydes.gradle.osgi.ConfigurationsCreator$configBundles.call(Unknown Source) at com.athaydes.gradle.osgi.OsgiRunPlugin$_createTasks_closure1.doCall(OsgiRunPlugin.groovy:30) at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:40) at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:25) at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:44) at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:79) at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:30) at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) at com.sun.proxy.$Proxy12.afterEvaluate(Unknown Source) at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:67) ... 54 more

Do not include jars for packages starting with 'osgi.*' in bundles directory

When using dependencies like osgi core or compendium, they should not be included in the osgi/bundle directory.

For example:

    compile 'org.osgi:osgi.core:6.0.0'
    compile 'org.osgi:osgi.cmpn:6.0.0'

Results in having osgi.cmpn-6.0.0.jar and osgi.core-6.0.0.jar in osgi/bundle. The main output also complains about not being able to start the bundle (and that is perfectly right, in my opinion):

  ERROR: Bundle osgi.cmpn [11] Error starting file:[...]/build/osgi/bundle/osgi.cmpn-6.0.0.jar     (org.osgi.framework.BundleException: Unable to resolve osgi.cmpn [11](R 11.0): missing requirement [osgi.cmpn [11](R 11.0)] osgi.compile.time.only; (&(must.not.resolve=*)(!(must.not.resolve=*))) Unresolved requirements: [[osgi.cmpn [11](R 11.0)] osgi.compile.time.only; (&(must.not.resolve=*)(!(must.not.resolve=*)))])
org.osgi.framework.BundleException: Unable to resolve osgi.cmpn [11](R 11.0): missing requirement [osgi.cmpn [11](R 11.0)] osgi.compile.time.only; (&(must.not.resolve=*)(!(must.not.resolve=*))) Unresolved requirements: [[osgi.cmpn [11](R 11.0)] osgi.compile.time.only; (&(must.not.resolve=*)(!(must.not.resolve=*)))]
    at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
    at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
    at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
    at java.lang.Thread.run(Thread.java:745)

runOsgi can not be started from IntelliJ

The task runOsgi can not be started from within IntelliJ, because it reads from system.in. Is there a way to allow user input by IntelliJ? Even if not, I think it should be possible to disable user input and let the task wait for an exit signal sent from the IDE.

:simplest-build:runOsgi FAILED
:simplest-build:runOsgi (Thread[Daemon worker,5,main]) completed. Took 0.114 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':simplest-build:runOsgi'.
> No line found

* Try:
Run with --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':simplest-build:runOsgi'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
    at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
    at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:46)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:58)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: java.util.NoSuchElementException: No line found
    at java_util_Scanner$nextLine.call(Unknown Source)
    at com.athaydes.gradle.osgi.OsgiRunner.delegateProcessTo(OsgiRunner.groovy:56)
    at com.athaydes.gradle.osgi.OsgiRunner.run(OsgiRunner.groovy:41)
    at com.athaydes.gradle.osgi.OsgiRunner$run.call(Unknown Source)
    at com.athaydes.gradle.osgi.OsgiRunPlugin$_runOsgiTask_closure3.doCall(OsgiRunPlugin.groovy:75)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:554)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:535)
    at org.gradle.api.internal.tasks.TaskMutator$1.execute(TaskMutator.java:77)
    at org.gradle.api.internal.tasks.TaskMutator$1.execute(TaskMutator.java:73)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 70 more


BUILD FAILED

Total time: 8.738 secs
Stopped 0 compiler daemon(s).
No line found
10:58:22: External task execution finished ':simplest-build:runOsgi --info --stacktrace'.

´´´

build broken with latest grade (3.4.1)

When using the master brunch of the osgi-run tutorial found in
https://sites.google.com/a/athaydes.com/renato-athaydes/posts/osgi-runtutorial-runyourjavakotlinfregecodeinosgi
with having grade version 3.4.1. installed
the first step fails.
This is
$ gradle crO
The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
:createOsgiRuntime FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':createOsgiRuntime'.

Configuration with name '__osgiRuntime0' not found.

Doesnt work under gradle 4.4.1

Hi,

It seems, that it doesnt work under gradle 4.4.1. We migrated from gradle 3.4. Main issue is, that generated configuration.ini and content of folder plugins is different.

The main difference, that start level is changed (I really dont know why) and osgiaas-cli-core is added:

__osgiRuntime__0
--- org.apache.felix:org.apache.felix.scr:2.0.12

__osgiRuntime__1
--- com.athaydes.osgiaas:osgiaas-cli-core:0.7
+--- com.athaydes.osgiaas:osgiaas-cli-api:0.7
| +--- com.athaydes.osgiaas:osgiaas-common:0.7
| --- org.apache.felix:org.apache.felix.shell:1.4.3
--- jline:jline:2.14.2

It looks like, that dependencies are handled by different way. Why?

It looks like, that level for start level is copied to transitive deps

Please help, with best regards, jiri

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.