다음 코드는 JDK7을 사용하는 Eclipse에서 아무런 문제없이 컴파일되지만 (업데이트 10을 사용하지만 모든 JDK7 버전에서 재현 가능해야 함) 명령 행을 통해 컴파일 할 때 오류가 발생하지 않습니다. 같은 JDK. 이 클래스는 인터페이스 메소드의 스텁 구현만을 제공합니다.코드 Eclipse에서는 컴파일되지만 명령 프롬프트에서는 컴파일되지 않습니다.
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 파일은 내가 명령 줄을 통해이을 컴파일하려면 다음 명령을 사용하고 here
에서 다운로드 할 수 있습니다
javac.exe -cp org.eclipse.osgi_3.8.0.v20120529-1548.jar TestBundle.java
이 제공 명령 줄을 통해 컴파일 할 때 오류 다음 :
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
당신은 이클립스 프로젝트 디렉토리에있는 .classpath 파일을 확인 했습니까? 그것은 당신에게 당신의 클래스 패스에 포함될 모든 jar 파일을 제공합니다. –
@BhavikShah : 예. 여기에는 JDK 및 위에서 언급 한 jar 파일에 대한 항목 만 들어 있습니다. – Manish