Java – the code is compiled in eclipse, but not from the command prompt

The following code has no problem compiling in eclipse using JDK7 (I use update 10, but it should be used with any version of JDK7), but it will fail when compiling with the same JDK from the command line This class only provides the stub implementation of interface methods

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.cert.X509Certificate;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.Version;


public class TestBundle implements Bundle {

    /**
     * @param args
     */
    public static void main(String[] args) {


    }

    @Override
    public int compareTo(Bundle o) {

        return 0;
    }

    @Override
    public <A> A adapt(Class<A> arg0) {

        return null;
    }

    @Override
    public Enumeration<URL> findEntries(String arg0,String arg1,boolean arg2) {

        return null;
    }

    @Override
    public BundleContext getBundleContext() {

        return null;
    }

    @Override
    public long getBundleId() {

        return 0;
    }

    @Override
    public File getDataFile(String arg0) {

        return null;
    }

    @Override
    public URL getEntry(String arg0) {

        return null;
    }

    @Override
    public Enumeration<String> getEntryPaths(String arg0) {

        return null;
    }

    @Override
    public Dictionary<String,String> getHeaders() {

        return null;
    }

    @Override
    public Dictionary<String,String> getHeaders(String arg0) {

        return null;
    }

    @Override
    public long getLastModified() {

        return 0;
    }

    @Override
    public String getLocation() {

        return null;
    }

    @Override
    public ServiceReference<?>[] getRegisteredServices() {

        return null;
    }

    @Override
    public URL getResource(String arg0) {

        return null;
    }

    @Override
    public Enumeration<URL> getResources(String arg0) throws IOException {

        return null;
    }

    @Override
    public ServiceReference<?>[] getServicesInUse() {

        return null;
    }

    @Override
    public Map<X509Certificate,List<X509Certificate>> getSignerCertificates(
            int arg0) {

        return null;
    }

    @Override
    public int getState() {

        return 0;
    }

    @Override
    public String getSymbolicName() {

        return null;
    }

    @Override
    public Version getVersion() {

        return null;
    }

    @Override
    public boolean hasPermission(Object arg0) {

        return false;
    }

    @Override
    public Class<?> loadClass(String arg0) throws ClassNotFoundException {

        return null;
    }

    @Override
    public void start() throws BundleException {


    }

    @Override
    public void start(int arg0) throws BundleException {


    }

    @Override
    public void stop() throws BundleException {


    }

    @Override
    public void stop(int arg0) throws BundleException {


    }

    @Override
    public void uninstall() throws BundleException {


    }

    @Override
    public void update() throws BundleException {


    }

    @Override
    public void update(InputStream arg0) throws BundleException {


    }

}

OSGi jar files can be downloaded from here

I compiled it from the command line using the following command:

javac.exe -cp org.eclipse.osgi_3.8.0.v20120529-1548.jar TestBundle.java

The following error occurred while compiling from the command line:

TestBundle.java:101: error: type ServiceReference does not take parameters
        public ServiceReference<?>[] getRegisteredServices() {
                               ^
TestBundle.java:119: error: type ServiceReference does not take parameters
        public ServiceReference<?>[] getServicesInUse() {
                               ^
TestBundle.java:18: error: TestBundle is not abstract and does not override abstract method adapt(Class) in Bundle
public class TestBundle implements Bundle {
       ^
TestBundle.java:28: error: method does not override or implement a method from a supertype
        @Override
        ^
TestBundle.java:35: error: name clash: <A>adapt(Class<A>) in TestBundle and adapt(Class) in Bundle have the same erasure,yet neither overrides the other
        public <A> A adapt(Class<A> arg0) {
                     ^
  where A is a type-variable:
    A extends Object declared in method <A>adapt(Class<A>)
TestBundle.java:34: error: method does not override or implement a method from a supertype
        @Override
        ^
6 errors

Solution

When compiling on Java 7, the OSGi specification bundle has a generic problem This is because JDK 1.4 backward compatible bundles are used at compile time, which makes them interrupted in JDK 7 After a large number of complaints, a new version JDK 7 meeting the following requirements has been released

4.3. 4.3.1 source and 0 is the same It's just recompiling You should be able to compile code using this jar I'm not sure what this has to do with the eclipse you use, but I guess they just use the old compilation specification classes

http://search.maven.org/remotecontent?filepath=org/osgi/org.osgi.core/4.3.1/org.osgi.core -4.3. 1.jar

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>