diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ec262bbd13..cc1b9f6725 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -6,6 +6,7 @@ This page describes the noteworthy improvements provided by each release of Ecli ### backports: +- using javac as the compiler for Tycho - new `mirror-target-platform` mojo - new director mojo - support for PDE Api Tools Annotations diff --git a/tycho-compiler-plugin/pom.xml b/tycho-compiler-plugin/pom.xml index 9b1bc2378c..e0db42e133 100644 --- a/tycho-compiler-plugin/pom.xml +++ b/tycho-compiler-plugin/pom.xml @@ -86,6 +86,11 @@ bcel test + + org.codehaus.plexus + plexus-compiler-javac + 2.14.2 + diff --git a/tycho-compiler-plugin/src/main/java/copied/org/apache/maven/plugin/AbstractCompilerMojo.java b/tycho-compiler-plugin/src/main/java/copied/org/apache/maven/plugin/AbstractCompilerMojo.java index 37f94ae550..b3daec6d0c 100644 --- a/tycho-compiler-plugin/src/main/java/copied/org/apache/maven/plugin/AbstractCompilerMojo.java +++ b/tycho-compiler-plugin/src/main/java/copied/org/apache/maven/plugin/AbstractCompilerMojo.java @@ -57,6 +57,8 @@ */ public abstract class AbstractCompilerMojo extends AbstractMojo { + protected static final String JDT_COMPILER_ID = "jdt"; + public static final String DEFAULT_SOURCE_VERSION = "11"; public static final String DEFAULT_TARGET_VERSION = "11"; @@ -144,8 +146,8 @@ public abstract class AbstractCompilerMojo extends AbstractMojo { /** * The compiler id of the compiler to use. */ - @Parameter(property = "maven.compiler.compilerId", defaultValue = "jdt") - private String compilerId; + @Parameter(property = "maven.compiler.compilerId", defaultValue = JDT_COMPILER_ID) + protected String compilerId; /** * Version of the compiler to use, ex. "1.3", "1.5", if fork is set to true diff --git a/tycho-compiler-plugin/src/main/java/org/eclipse/tycho/compiler/AbstractOsgiCompilerMojo.java b/tycho-compiler-plugin/src/main/java/org/eclipse/tycho/compiler/AbstractOsgiCompilerMojo.java index e052d7cc59..5551f78b79 100644 --- a/tycho-compiler-plugin/src/main/java/org/eclipse/tycho/compiler/AbstractOsgiCompilerMojo.java +++ b/tycho-compiler-plugin/src/main/java/org/eclipse/tycho/compiler/AbstractOsgiCompilerMojo.java @@ -573,6 +573,7 @@ public List getClasspathElements() throws MojoExecutionException { final List classpath = new ArrayList<>(); Set seen = new HashSet<>(); Set includedPathes = new HashSet<>(); + boolean useAccessRules = JDT_COMPILER_ID.equals(compilerId); for (ClasspathEntry cpe : getClasspath()) { Stream classpathLocations = Stream .concat(cpe.getLocations().stream(), @@ -581,7 +582,7 @@ public List getClasspathElements() throws MojoExecutionException { .filter(AbstractOsgiCompilerMojo::isValidLocation).distinct(); classpathLocations.forEach(location -> { String path = location.getAbsolutePath(); - String entry = path + toString(cpe.getAccessRules()); + String entry = path + toString(cpe.getAccessRules(), useAccessRules); if (seen.add(entry)) { includedPathes.add(path); classpath.add(entry); @@ -646,19 +647,22 @@ protected BundleProject getBundleProject() throws MojoExecutionException { return (BundleProject) projectType; } - private String toString(Collection rules) { - StringJoiner result = new StringJoiner(RULE_SEPARATOR, "[", "]"); // include all - if (rules != null) { - for (AccessRule rule : rules) { - result.add((rule.isDiscouraged() ? "~" : "+") + rule.getPattern()); + private String toString(Collection rules, boolean useAccessRules) { + if (useAccessRules) { + StringJoiner result = new StringJoiner(RULE_SEPARATOR, "[", "]"); // include all + if (rules != null) { + for (AccessRule rule : rules) { + result.add((rule.isDiscouraged() ? "~" : "+") + rule.getPattern()); + } + result.add(RULE_EXCLUDE_ALL); + } else { + // include everything, not strictly necessary, but lets make this obvious + //result.append("[+**/*]"); + return ""; } - result.add(RULE_EXCLUDE_ALL); - } else { - // include everything, not strictly necessary, but lets make this obvious - //result.append("[+**/*]"); - return ""; + return result.toString(); } - return result.toString(); + return ""; } @Override @@ -719,7 +723,7 @@ protected CompilerConfiguration getCompilerConfiguration(List compileSou List> copy = new ArrayList<>( compilerConfiguration.getCustomCompilerArgumentsEntries()); compilerConfiguration.getCustomCompilerArgumentsEntries().clear(); - compilerConfiguration.addCompilerCustomArgument("-properties", prefsFilePath); + addCompilerCustomArgument(compilerConfiguration, "-properties", prefsFilePath); compilerConfiguration.getCustomCompilerArgumentsEntries().addAll(copy); } } @@ -738,7 +742,7 @@ protected CompilerConfiguration getCompilerConfiguration(List compileSou if (jreClasspathEntry.isModule()) { Collection modules = jreClasspathEntry.getLimitModules(); if (!modules.isEmpty()) { - compilerConfiguration.addCompilerCustomArgument("--limit-modules", String.join(",", modules)); + addCompilerCustomArgument(compilerConfiguration, "--limit-modules", String.join(",", modules)); } } } @@ -782,7 +786,7 @@ private void configureCompilerLog(CompilerConfiguration compilerConfiguration) t fileExtension = "log"; } logPath = logPath + logFileName + "." + fileExtension; - compilerConfiguration.addCompilerCustomArgument("-log", logPath); + addCompilerCustomArgument(compilerConfiguration, "-log", logPath); } private void configureBootclasspathAccessRules(CompilerConfiguration compilerConfiguration) @@ -811,8 +815,8 @@ private void configureBootclasspathAccessRules(CompilerConfiguration compilerCon .addAll(getBundleProject().getBootClasspathExtraAccessRules(DefaultReactorProject.adapt(project))); } if (!accessRules.isEmpty()) { - compilerConfiguration.addCompilerCustomArgument("org.osgi.framework.system.packages", - toString(accessRules)); + addCompilerCustomArgument(compilerConfiguration, "org.osgi.framework.system.packages", + toString(accessRules, true)); } } @@ -837,7 +841,7 @@ private void configureJavaHome(CompilerConfiguration compilerConfiguration) thro .orElseThrow(() -> new MojoExecutionException( "useJDK = BREE configured, but no toolchain of type 'jdk' with id '" + toolchainId + "' found. See https://maven.apache.org/guides/mini/guide-using-toolchains.html")); - compilerConfiguration.addCompilerCustomArgument("use.java.home", osgiToolchain.getJavaHome()); + addCompilerCustomArgument(compilerConfiguration, "use.java.home", osgiToolchain.getJavaHome()); configureBootClassPath(compilerConfiguration, osgiToolchain); } } @@ -851,7 +855,7 @@ private void configureBootClassPath(CompilerConfiguration compilerConfiguration, if (includeParent != null) { Xpp3Dom[] includes = includeParent.getChildren("include"); if (includes.length > 0) { - compilerConfiguration.addCompilerCustomArgument("-bootclasspath", scanBootclasspath( + addCompilerCustomArgument(compilerConfiguration, "-bootclasspath", scanBootclasspath( osgiToolchain.getJavaHome(), includes, bootClassPath.getChild("excludes"))); } } @@ -859,6 +863,14 @@ private void configureBootClassPath(CompilerConfiguration compilerConfiguration, } } + protected boolean addCompilerCustomArgument(CompilerConfiguration compilerConfiguration, String key, String value) { + if (JDT_COMPILER_ID.equals(compilerId)) { + compilerConfiguration.addCompilerCustomArgument(key, value); + return true; + } + return false; + } + private String scanBootclasspath(String javaHome, Xpp3Dom[] includes, Xpp3Dom excludeParent) { DirectoryScanner scanner = new DirectoryScanner(); scanner.setBasedir(javaHome); diff --git a/tycho-its/projects/tycho-compiler-plugin/javac/pom.xml b/tycho-its/projects/tycho-compiler-plugin/javac/pom.xml new file mode 100644 index 0000000000..c6de9f2183 --- /dev/null +++ b/tycho-its/projects/tycho-compiler-plugin/javac/pom.xml @@ -0,0 +1,36 @@ + + 4.0.0 + + org.eclipse.tycho.it + javac.parent + 1.0.0-SNAPSHOT + pom + + 5.0.0-SNAPSHOT + + + + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho-version} + true + + + org.eclipse.tycho + tycho-compiler-plugin + ${tycho-version} + + javac + + + + + + + simple + + diff --git a/tycho-its/projects/tycho-compiler-plugin/javac/simple/META-INF/MANIFEST.MF b/tycho-its/projects/tycho-compiler-plugin/javac/simple/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..ac88e3c0dc --- /dev/null +++ b/tycho-its/projects/tycho-compiler-plugin/javac/simple/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-SymbolicName: simple +Bundle-Version: 1.0.0.qualifier diff --git a/tycho-its/projects/tycho-compiler-plugin/javac/simple/build.properties b/tycho-its/projects/tycho-compiler-plugin/javac/simple/build.properties new file mode 100644 index 0000000000..34d2e4d2da --- /dev/null +++ b/tycho-its/projects/tycho-compiler-plugin/javac/simple/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/tycho-its/projects/tycho-compiler-plugin/javac/simple/pom.xml b/tycho-its/projects/tycho-compiler-plugin/javac/simple/pom.xml new file mode 100644 index 0000000000..89b6ed014a --- /dev/null +++ b/tycho-its/projects/tycho-compiler-plugin/javac/simple/pom.xml @@ -0,0 +1,13 @@ + + 4.0.0 + + org.eclipse.tycho.it + javac.parent + 1.0.0-SNAPSHOT + + simple + + eclipse-plugin + + \ No newline at end of file diff --git a/tycho-its/projects/tycho-compiler-plugin/javac/simple/src/Test.java b/tycho-its/projects/tycho-compiler-plugin/javac/simple/src/Test.java new file mode 100644 index 0000000000..461755c786 --- /dev/null +++ b/tycho-its/projects/tycho-compiler-plugin/javac/simple/src/Test.java @@ -0,0 +1,19 @@ +/******************************************************************************* + * Copyright (c) 2012 SAP AG and others. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * SAP AG - initial API and implementation + *******************************************************************************/ + +public class Test +{ + public static void main(String[] args) { + int a = 0; + } +} diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/CompilerPluginTest.java b/tycho-its/src/test/java/org/eclipse/tycho/test/CompilerPluginTest.java new file mode 100644 index 0000000000..fedcd0cce0 --- /dev/null +++ b/tycho-its/src/test/java/org/eclipse/tycho/test/CompilerPluginTest.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2024 Christoph Läubrich and others. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christoph Läubrich - initial API and implementation + *******************************************************************************/ +package org.eclipse.tycho.test; + +import org.apache.maven.it.Verifier; +import org.junit.Test; + +/** + * Test for the tycho-compiler-plugin + */ +public class CompilerPluginTest extends AbstractTychoIntegrationTest { + + @Test + public void testJavac() throws Exception { + Verifier verifier = getVerifier("tycho-compiler-plugin/javac", true, true); + verifier.executeGoal("compile"); + verifier.verifyErrorFreeLog(); + } + +}