On bundle compiling with code
package ihtika2.mainform;
import com.google.code.ihtika.Vars.Ini;
import ihtika2.mainform.service.MainFormInterface;
import java.util.HashSet;
import java.util.Hashtable;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.wiring.FrameworkWiring;
public class Activator implements BundleActivator {
@Override
public void start(BundleContext context) throws Exception {
Hashtable<String, String> props = new Hashtable<String, String>();
props.put("Funct", "MainForm");
context.registerService(MainFormInterface.class.getName(), new MainForm(), props);
ServiceReference[] refs = context.getServiceReferences(
MainFormInterface.class.getName(), "(Funct=MainForm)");
if (refs == null) {
System.out.println("Not Found MainForm on start");
} else {
MainFormInterface MainForm = (MainFormInterface) context.getService(refs[0]);
MainForm.sendContext(context);
MainForm.showWindow();
}
int x = 0;
for (Bundle qqq : context.getBundles()) {
if (x < 1) {
HashSet<Bundle> bundles;
bundles = new HashSet<Bundle>();
bundles.add(qqq);
HashSet<Bundle> depends = (HashSet<Bundle>) context.getBundle(0).adapt(FrameworkWiring.class).getDependencyClosure(bundles);
System.out.println("---");
System.out.println(qqq.getSymbolicName());
System.out.println("+++");
for (Bundle depends1 : depends) {
System.out.println(depends1.getSymbolicName());
}
}
x++;
}
I get error
cd C:\Art\Dropbox\OpenSource\MyGIT\ihtika\Sources\Bundles\I_MainForm; JAVA_HOME=C:\\Java\\jdk1.7.0_06 "\"C:\\Program Files\\NetBeans Dev 201208160001\\java\\maven\\bin\\mvn.bat\"" clean install
Scanning for projects...
------------------------------------------------------------------------
Building I_MainForm OSGi Bundle 1.0-SNAPSHOT
------------------------------------------------------------------------
[clean:clean]
Deleting C:\Art\Dropbox\OpenSource\MyGIT\ihtika\Sources\Bundles\I_MainForm\target
[resources:resources]
[debug] execute contextualize
Using 'UTF-8' encoding to copy filtered resources.
Copying 1 resource
[compiler:compile]
Compiling 5 source files to C:\Art\Dropbox\OpenSource\MyGIT\ihtika\Sources\Bundles\I_MainForm\target\classes
-------------------------------------------------------------
COMPILATION ERROR :
-------------------------------------------------------------
ihtika2/mainform/Activator.java:[38,109] error: cannot find symbol
1 error
-------------------------------------------------------------
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 1.886s
Finished at: Tue Aug 21 12:21:25 MSK 2012
Final Memory: 10M/25M
------------------------------------------------------------------------
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project I_MainForm: Compilation failure
\Art\Dropbox\OpenSource\MyGIT\ihtika\Sources\Bundles\I_MainForm\src\main\java\ihtika2\mainform\Activator.java:[38,109] error: cannot find symbol
-> [Help 1]
To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.
For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
Please advice me, how to compile this code? I use apache-maven-2.2.1, jdk1.7.0_06, compiling for the 1.6 code (setting in NetBeans project ). What interesting - NetBeans doesn't show error on this string (Activator.java:[38,109]) and consider this code correct.
Problem is in the Felix 4.0.3 and org.osgi.core (4.3.0) jars bundles from Central Maven repo.
I guess they are outdated.
As far as I understand it, except Osgi version (4.3) has also revision.
Probably the library at the central Maven repository outdated.
The solution - download and compile the source from
https://svn.apache.org/repos/asf/felix/trunk/ framework.
Ie - after source download, in the folder with sources:
cd framework
mvn install
It's command will compile and install Felix to your local Maven repo. After this you can use new Felix's bundle (SNAPSHOT) instead the bundles from the Central Maven repo.
Sorry my bad English.