2

maven 有一些我不明白的地方,我没有找到任何答案。所以我在这里问它,希望得到答案。
我添加了一个 jar 作为系统范围的项目的 maven 依赖项。
当我analyze-only在依赖插件上运行目标时,它确实找到了它。但是每当我想使用这个 jar 中默认包中的类时,它就不会编译。
我对来自同一个提供程序的具有相同类的 jar 做了同样的事情,但这次它位于一个包中,而不是默认包,它可以编译。
有什么明显的我错过或有人已经遇到过同样的问题吗?

不值得发布代码,因为我只是尝试导入系统依赖类之一。
我的 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>
4

2 回答 2

2

很抱歉打扰你们,感谢您的帮助。
我找到了我的问题的答案,它与 Maven 无关。对于 1.4 以上的 java 版本,您不能从命名包中导入默认包中的类,我使用的是 1.7 版本进行编译。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4989710

于 2013-02-27T23:24:34.167 回答
1

您是否提供了它正在寻找的 JAR?听起来它找不到要编译的 JAR。

你读过这个吗?

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

它指出:

system:此依赖项在项目生命周期的某个阶段是必需的,但特定于系统。不鼓励使用此范围:这被认为是一种“高级”功能,只有在您真正了解其使用的所有后果时才应使用,如果不是实际上无法量化,这可能会非常困难。根据定义,此范围使您的构建不可移植。在某些边缘情况下可能是必要的。系统范围包括指向此依赖项在本地机器上的物理位置的元素。因此,它用于指代预期会出现在给定本地机器上而不是存储库中的某些工件;并且其路径可能因机器而异。systemPath 元素可以引用其路径中的环境变量:例如 ${JAVA_HOME}。

因此,除非您有充分的理由使用它,否则最好将工件部署到存储库中并像任何其他工件一样引用它?

于 2013-02-27T03:03:32.850 回答