簡體   English   中英

Maven 無法使用 rt.jar 進行編譯

[英]Maven can't compile using rt.jar

我的項目使用sun.security.tools.keytool在 JDK 1.8 下生成證書,這個包可以在rt.jar找到。 根據Introduction to the Dependency Mechanism, System Dependencies ,我可以將rt.jar作為依賴項添加到我的項目中:

<dependency>
  <groupId>sun.jdk</groupId>
  <artifactId>rt.jar</artifactId>
  <version>1.8</version>
  <scope>system</scope>
  <systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>

我很確定 Maven 找到了這個 jar 文件。 但是,當我導入sun.security.tools.keytool.Main ,它仍然會生成錯誤。 此外,最奇怪的是,如果我將rt.jar復制到某個地方並在pom.xml填充其路徑,它就可以工作! 一旦我切換回使用原始rt.jar ,它就會失敗!

誰能告訴我這怎么會發生?

我創建了一個 Maven 項目並將您的問題的<dependency>添加到它的 POM 中。

首先我得到:

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] .../SO-31353565/src/main/java/igb/so/SO31353565.java:[6,34]
    package sun.security.tools.keytool does not exist
[ERROR] .../SO-31353565/src/main/java/igb/so/SO31353565.java:[12,50]
    cannot find symbol
  symbol:   variable Main
  location: class igb.so.SO31353565

然后,根據用 JDK8 找不到符號 (CertAndKeyGen) ,我補充說:

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
          <fork>true</fork>
          <compilerArgument>-XDignore.symbol.file</compilerArgument>
        </configuration>
      </plugin>
    </plugins>
  </pluginManagement>
</build>

到POM,編譯成功。

如果您使用 Gradle 而不是 Maven,您可以將其添加到您的構建中:

compileJava {
    options.fork = true
    options.forkOptions.executable = 'javac'
    options.compilerArgs << "-XDignore.symbol.file"
}

它對我有用! ;)

我是這樣解決的:

  1. 添加到 JAVA_HOME/lib/rt.jar
  2. 轉到 Eclipse 菜單 Windows -> Windows -> Preferences -> Java -> Installed JREs
  3. 選擇jdk版本。 在我的情況下 jdk-11.0.4
  4. 選擇 Add External JARs.. 並添加 JAVA_HOME/lib/rt.jar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM