2013-02-27 2 views
2

Maven에서 이해할 수없는 부분이 있으며 거기에서 어떤 대답도 찾을 수 없습니다. 그래서 여기에 답을 얻기 위해 묻습니다.
시스템 범위로 프로젝트의 메이븐 종속성으로 jar를 추가했습니다.
analyze-only 목표 의존성 플러그인을 실행할 때 찾을 수 있습니다. 그러나이 jar 파일의 기본 패키지에있는 클래스를 사용하려고 할 때마다 컴파일되지 않습니다.
같은 클래스를 사용하는 동일한 공급자의 jar 파일을 사용하여 동일한 작업을 수행했지만 이번에는 기본 패키지가 아닌 다른 패키지에 있으며 컴파일됩니다.
내가 놓친 명백한 것이 있습니까? 아니면 누군가 이미 동일한 문제가 발생 했습니까?Maven 종속성이 기본 패키지의 클래스를 찾지 못함

시스템 종속성 클래스 중 하나를 가져 오려고하면 코드를 게시 할 가치가 없습니다.
내 POM (시스템 의존성)

<?xml version="1.0" encoding="UTF-8"?> 
<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>edu.algo</groupId> 
    <artifactId>algorithms</artifactId> 
    <version>1.0</version> 
    <properties> 
    <lib.path>C:/lib</lib.path> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>edu.princeton.cs</groupId> 
     <artifactId>stdlib</artifactId> 
     <version>1.0</version> 
     <scope>system</scope> 
     <systemPath>${lib.path}/stdlib/stdlib.jar</systemPath> 
    </dependency> 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.6</version> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 
+1

다른 사람들이 도울 수 있도록 pom.xml 및 코드를 게시하십시오. – Lan

답변

1

불편을 끼쳐 드려 죄송합니다.
나는 내 질문에 대한 답을 찾았고 그것이 maven과는 아무런 관련이 없다. 1.4 이상의 Java 버전에서는 명명 된 패키지에서 기본 패키지의 클래스를 가져올 수 없습니다. 컴파일 할 때 1.7 버전을 사용했습니다.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4989710

1

당신이 그것을 찾고 년대 JAR 공급이 있나요? 컴파일 할 JAR 파일을 찾을 수없는 것 같습니다.

읽었습니까? 이 종속성이 프로젝트의 라이프 사이클의 어떤 단계에서 필요하지만 특정 시스템입니다 :

시스템 :

http://docs.codehaus.org/display/MAVENUSER/Dependency+Scopes

는 말한다. 이 범위의 사용은 권장하지 않습니다. 이 기능은 "고급"종류의 기능으로 간주되며 실제 사용의 모든 파급 효과를 이해할 때 만 사용해야합니다.이 경우 실제로는 계량 할 수 없을지라도 매우 어려울 수 있습니다. 이 범위는 정의에 따라 빌드를 비 휴대용으로 만듭니다. 특정 가장자리의 경우에는 이 필요할 수 있습니다. 시스템 범위에는 로컬 시스템에 대한 종속성의 물리적 위치를 가리키는 요소가 포함됩니다. 따라서 아티팩트가 특정 로컬 컴퓨터에 존재할 것으로 예상되는 곳을 참조하는 데 사용되며 리포지토리에 없습니다. 그 경로는 기계마다 다를 수 있습니다. systemPath 요소는 $ {JAVA_HOME} 경로의 환경 변수를 참조 할 수 있습니다.

그렇다면 이것을 사용하는 확실한 이유가 없다면 아티팩트를 저장소에 배포하고 다른 아티팩트처럼 참조하는 것이 더 좋을까요?

+0

나는 이미 이것을 읽었지만 이것을 상기시켜 주셔서 감사합니다. maven이 종속성을 해결하기 때문에 jar를 제공했습니다. 먼저 로컬 저장소에 jar 파일을 설치했지만 기본 패키지에서 클래스를 사용할 수 없다는 것을 알았을 때 삭제했습니다. 그런 다음 몇 가지 실험을하고 있었기 때문에이 프로젝트를 다시 설치하지 않았으며이 프로젝트는 개인용 컴퓨터가 아닌 어떤 환경에도 배포되지 않을 것입니다. –

+0

따라서 클래스 패스에 클래스를 추가하는 데 사용 된 두 클래스에서 클래스를 볼 수 없습니다.Maven이 클래스 패스에 추가하는 방식이 아니라 JAR 주위에 더 많은 문제가있는 것 같습니다. 아마도 클래스가 공용 클래스로 정의되지 않았습니까? 모든 의존성을 나열하는 dependency : tree 목표를 사용하여이를 찾도록 할 수 있습니다. 그러면 JAR이 선택되었음을 확인할 수 있습니다. – EdH

+0

내가 사용하고자하는 모든 클래스는 public이며 이미 의존성에 따라 실행됩니다. 트리, 필요한 depedency를 나열합니다. 따라서 JAR 파일은 선택되지만 클래스가 패키지에 포함되어 있지 않으면 클래스가 표시되지 않습니다. 동일한 JAR의 다른 버전으로 실험 종속성을 추가했습니다. 이 JAR에는 모든 클래스가 기본값 이외의 패키지에 있습니다. 이 경우 컴파일 타임에 클래스를 사용할 수 있습니다. –

관련 문제