Как синхронизировать источник и цель Java между Gradle и Eclipse? - PullRequest
0 голосов
/ 18 января 2019

Gradle имеет исходную совместимость и переменные targetCompatability, которые можно установить.Eclipse имеет соответствие JDK, совместимость сгенерированных файлов классов и совместимость с исходным кодом.

Есть ли какой-либо способ автоматически установить одно из другого?В идеале материал Gradle должен быть установлен из материала Eclipse.

edit: эти вещи, похоже, хранятся в: org.eclipse.jdt.core.prefs

edit2: они выглядят так:

D: \ ray \ dev \ conradapps \ printg> cat .settings \ org.eclipse.jdt.core.prefs eclipse.preferences.version = 1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode = enabled org.eclipse.jdt.core.compiler.codegen.methodParameters = не создавать org.eclipse.jdt.core.compiler.codegen.targetPlatform = 1.8 org.eclipse.jdt.core.compiler.ocalgenunused= preserve org.eclipse.jdt.core.compiler.compliance = 11 org.eclipse.jdt.core.compiler.debug.lineNumber = generate org.eclipse.jdt.core.compiler.debug.localVariable = generate org.eclipse.jdt.core.compiler.debug.sourceFile = generate org.eclipse.jdt.core.compiler.problem.assertIdentifier = ошибка org.eclipse.jdt.core.compiler.problem.enumIdentifier = ошибка org.eclipse.jdt.core.compiler.release = отключено org.eclipse.jdt.core.compiler.source = 1.8

я могу сделатьКе это работает следующим образом, но это взломать:)

import java.io.IOException;
import java.nio.file.*;
import java.util.*;
plugins {
    id 'java-library'
    id 'application'
    id 'distribution'
}

repositories {
    jcenter()
}
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
dependencies {
    testImplementation 'junit:junit:4.12'
}
String myMainClass='p.Main'
jar {
  manifest {
    attributes(
      'Main-Class': myMainClass
    )
  }
}
application {
    mainClassName = myMainClass
}
class Hack {
    static String[] hack() throws IOException {
        System.out.println("Working Directory = "+System.getProperty("user.dir"));
        String dir="./.settings";
        String name="org.eclipse.jdt.core.prefs";
        File file=new File(dir,name);
        String[] strings=new String[3];
        for(int i=0;i<strings.length;i++)
            strings[i]="";
        if(file.exists()) System.out.println(file.toString()+" exists.");
        else return strings;
        List<String> lines=new ArrayList<>();
        try {
            if(usePath) {
                Path path=FileSystems.getDefault().getPath(dir,name);
                lines=java.nio.file.Files.readAllLines(path);
            } else {
                BufferedReader bufferedReader=new BufferedReader(new FileReader(file));
                for(String line=bufferedReader.readLine();line!=null;line=bufferedReader.readLine())
                    lines.add(line);
                bufferedReader.close();
            }
            int index;
            for(String line:lines) {
                if(line.startsWith("org.eclipse.jdt.core.compiler.compliance")) {
                    index=line.indexOf("=");
                    if(index>0) {
                        System.out.println("compliance: "+line.substring(index+1));
                        strings[0]=line.substring(index+1);
                    }
                }
                if(line.startsWith("org.eclipse.jdt.core.compiler.source=1.8")) {
                    index=line.indexOf("=");
                    if(index>0) {
                        System.out.println("source: "+line.substring(index+1));
                        strings[1]=line.substring(index+1);
                    }
                }
                if(line.startsWith("org.eclipse.jdt.core.compiler.codegen.targetPlatform")) {
                    index=line.indexOf("=");
                    if(index>0) {
                        System.out.println("target: "+line.substring(index+1));
                        strings[2]=line.substring(index+1);
                    }
                }
            }
        } catch(Exception e) {
            System.out.println("caught: "+e);
        }
        return strings;
    }
    public static void main(String[] args) throws IOException {
        hack();
    }
    static boolean usePath;
}
println("java version is: ${JavaVersion.current()}")
String[] strings=Hack.hack();
if(strings[1]!="") {
    println 'setting source'
    sourceCompatibility = strings[1]
}
if(strings[2]!="") {
    println 'setting target'
    targetCompatibility = strings[2]
}

1 Ответ

0 голосов
/ 18 января 2019

Да. Если вы хотите, чтобы Gradle передавал вашу конфигурацию Eclipse, в основном, начиная с Gradle 5.1.1, просто добавьте:

sourceCompatibility = '1.7'
targetCompatibility = '1.8'

в ваш файл build.gradle. Обратите внимание, что до версии java 10 перечисление составляло 1.8,1.9,1.10, но в Java 11 и последующих версиях перечисление составляло 11, 12 и т. Д. Проверьте документы Gradle . Если вы наткнетесь на этот ответ : Для меня с Gradle 5.0 java-версия работает с кавычками или без них (либо 1.8, либо '1.8'), и это указано в последней версии javadocs. Это также работало как при добавлении внутри, так и вне compileJava {}. Я проверил это на многопроектной сборке.

Я не уверен насчет передачи конфигурации Eclipse в Gradle. Разве это не должно идти наоборот? Gradle - это центральный инструмент конфигурации, который настраивает процесс сборки и любую IDE, которую вы используете (вы или ваш соавтор). Даже если это возможно, Gradle действительно манипулирует .classpath и другими файлами Eclipse. Поэтому, чтобы быть уверенным, что если бы это было решающим моментом, я бы предпочел добавить конфигурацию в Gradle и позволить этому иметь дело с Eclipse или любыми другими файлами IDE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...