Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add Java system modules to compile in Eclipse

I have some legacy Java code, ie.:

package org.alo.test.j9;
import javax.activation.DataHandler;   // in java.activation module
import javax.annotation.PostConstruct; // in java.xml.ws.annotation module
public class OldClass {
    public static void main(String[] args) {
        DataHandler dh = new DataHandler(null, null);
        System.out.println(dh);
    }
}

That is not yet modularized so it requires to use --add-modules to compile it with Java 9.

$ javac -version
javac 9
$ javac org/alo/test/j9/OldClass.java
src/org/alo/test/j9/OldClass.java:3: error: package javax.activation is not visible
import javax.activation.DataHandler;   // in java.activation module
            ^
  (package javax.activation is declared in module java.activation, which is not in the module graph)
src/org/alo/test/j9/OldClass.java:4: error: package javax.annotation is not visible
import javax.annotation.PostConstruct; // in java.xml.ws.annotation module
            ^
  (package javax.annotation is declared in module java.xml.ws.annotation, which is not in the module graph)
2 errors

I need to add the modules I'm using in order to be able to successfully compile:

$ javac org/test/OldClass.java --add-modules=java.activation,java.xml.ws.annotation

I want to compile it in Eclipse (using Oxygen.1a) with Java 9. But I get The import javax.activation cannot be resolved compilation error.

How can I tell the eclipse compiler to add these modules? I didn't find any tip in Eclipse documentation about it.

Here you can find a simple eclipse project I'm testing with.

like image 579
alostale Avatar asked Oct 17 '17 14:10

alostale


People also ask

How do I import a module into Eclipse?

Import an Eclipse project as a module From the main menu, select File | New | Module from Existing Sources. In the dialog that opens, select the directory in which your sources, libraries, and other assets are located and click Open. Select Import module from external model | Eclipse and click Next.

What is a Java module in Eclipse?

Module is a uniquely named reusable group of related packages, as well as resources and a module descriptor (module-info.java) All JDK Modules starts with "jdk. *". All Java SE Specifications Modules starts with "java.


1 Answers

Complete documentation for these features still needs to be written, but a start has been made in the New & Noteworthy for Photon M3 (work in progress). The functionality you are looking for is mentioned in the paragraph starting with

On the Contents tab individual modules inside a container like JRE System Library can be included or excluded by moving the module from left-to-right or vice versa ...

This dialog tab combines effects of --add-modules and --limit-modules.

Edit: In Eclipse 2019-06 the UI mentioned above has been revamped. Up-to-date documentation can be found in the online help.

like image 79
Stephan Herrmann Avatar answered Sep 26 '22 21:09

Stephan Herrmann