aviso: [opções] caminho da classe de auto-inicialização não definido em conjunto com -source 1.5

138

Recebo a mensagem de aviso no momento da criação!

aviso: [opções] caminho da classe de auto-inicialização não definido em conjunto com -source 1.5

Como posso corrigir isso?

Sam
fonte
1
Fóruns do NetBeans: forums.netbeans.org/topic43819.html
Alex K
veja stackoverflow.com/questions/9164625/... para uma solução no caso de você estiver usando Maven
hoijui
4
Isso me causou dor de cabeça usando o String.join do Java 8 em uma compilação do Maven com a origem e o destino definidos como 7. Usei a regra requireJavaVersion do plugin maven-enforcer-plugin para impor o intervalo <version>[1.7.0,1.7.0-79]</version>que pelo menos interrompe a compilação com uma mensagem clara em vez de um teste com mensagem obscura.
earcam

Respostas:

102

Em uma postagem no blog :

Para usar o javac do JDK N para o compilador cruzado para uma versão de plataforma mais antiga, a prática correta é:

  • Use a configuração -source mais antiga.
  • Configure o caminho do bootclass para compilar com o rt.jar (ou equivalente) da plataforma mais antiga.

Se a segunda etapa não for executada, o javac usará obedientemente as regras do idioma antigo combinadas com as novas bibliotecas, o que pode resultar em arquivos de classe que não funcionam na plataforma mais antiga, pois as referências a métodos inexistentes podem ser incluídas.

Eduard Wirch
fonte
11
Ótimo, embora pareça mais fácil usar apenas um JDK mais antigo para compilar.
Dhardy
42

uso do bootclasspath

javac -bootclasspath /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar \
      -source 1.7 Main.java

Nos sistemas UNIX, localize rt.jarusando:

locate -r '/rt.jar$'

Defina JAVA_HOMEpara que rt.jaresteja localizado em $JAVA_HOME/jre/lib/rt.jare:

javac -source 1.7 -bootclasspath "$JAVA_HOME/jre/lib/rt.jar" Main.java

Testado no Ubuntu 14.04 para Oracle Java 7 e 8.

Ciro Santilli adicionou uma nova foto
fonte
4

Atualmente, estou executando o Netbeans IDE 8.0.2 com o JDK 1.8 no Linux Mint 17.1, que possui versão-java = 1.7.0_65. Para poder executar arquivos JAR, tive que definir o myProject> Propriedades> Origem / Formato Binário: JDK 7. No entanto, ao criar (myProject> Clean and Build), recebi um aviso semelhante: aviso: [options] caminho da classe de auto-inicialização não definido em conjunto com -source 1.7.

A solução foi adicionar a plataforma Linux Mint JDK1.7 à lista de plataformas Netbeans.

Isso pode ser feito em myProject> Properties> Libraries e clicando no botão Manage Platforms .... Em seguida, na janela Java Platform Manager, clique em Add Platform ... e selecione: Java Standard Edition, clique em Next e navegue para / usr / lib / jvm / java-7-openjdk-amd64 (ou qualquer que seja o local da versão do JDK 1.7) ) O nome da plataforma será definido como JDK1.7. Basta clicar em Concluir e pronto.

Agora você pode selecionar a plataforma Java nas propriedades do projeto. Selecionando JDK1.7 e executando o Clean and Build: não há mais avisos. :-)

n9dyfi
fonte
1
"myProject> Propriedades> Formato de origem / binário: JDK 7" funcionou para mim
Parâmetro médico
2

O aviso pode ser desativado com uma nova subopção do JDK 7 na família -Xlint, -Xlint: -options. por exemplo

$ javac -source 1.5 -Xlint: -options exemplo.java

fontes: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source

e

http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/javac.html#xlintwarnings

Avisos que podem ser ativados ou desativados com a opção -Xlint

Ative o nome do aviso com a opção -Xlint: name, em que name é um dos seguintes nomes de aviso. Da mesma forma, você pode desativar o nome do aviso com a opção -Xlint: -name: ...

opções Avise sobre problemas relacionados ao uso das opções da linha de comando. Consulte Exemplo de compilação cruzada para obter um exemplo desse tipo de aviso.

Néon
fonte
38
Por favor, note que não é uma boa idéia para calar a boca avisos como este
Alexander Malakhov
9
concordado, mas às vezes é melhor desabilitar alguns avisos versus emitir centenas deles, para que seus verdadeiros avisos sejam ocultos.
Neon
3
Alguém pode dar um exemplo mínimo de algo errado, ignorando esse aviso?
Ciro Santilli # 18/15
1
Veja o comentário acima
real_paul 12/01
2

Certifique-se de que sua versão jdk e a versão de origem do compilador java sejam as mesmas. Por exemplo, se você estiver usando o maven, e tiver configurado o projeto usando o JDK 9, o seguinte trecho de pom faria o aviso acima

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    ...
                </configuration>
            </plugin>

A correção da versão de origem / destino para 9 corrige o aviso como abaixo

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>9</source>
                    <target>9</target>
                    ...
                </configuration>
            </plugin>
Sandeep T
fonte
1
Isso corrigiu um problema com o qual eu estava lutando por cerca de uma hora, mas não consegui vê-lo.
Rutendo 14/11/19
-2
  1. Faça o download do JDK (na versão de aviso por escrito) -> instalar

  2. Clique com o botão direito do mouse em seu projeto -> Propriedades -> Bibliotecas -> plataforma Java (adicione o JDK instalado) -> OK

Erasyl Abenov
fonte