Sorry, typo: 5) Navigate to your Classes node -> <default package>, open module-info.java and add the following line: requires org.apache.logging.log4j.core;
should say: 5) Navigate to your Classes node -> <default package>, open module-info.java and add the following line: requires *org.apache.logging.log4j*; On Thu, Oct 4, 2018 at 8:52 AM Pete Whelpton <peedee...@gmail.com> wrote: > Hi Emma, > > Yes, I think there is something awry with the log4j-api-2.11.1.jar. To > get it working just using ModulePath, I first: > > 1) Opened the log4j-api-2.11.1.jar file in Archive Manager > > 2) Copied the module-info.class file from /META-INF/versions/9/ folder to > the root of the archive > > After both the api and core jars are (re)added to your module path, you > can use "requires org.apache.logging.log4j;" in your own module-info > file. Netbeans will find this in code completion. :) > > What I believe happens during classloading is first the release specific > location is checked, and if not it falls back to the default (root) > location. Loading via ModulePath requires a compiled module-info in the > "base" folder of the classes. > In the case of the log4j-api-2.11.1.jar file, the release specific > location (/META-INF/versions/9/) contains only only one class - > presumably the one and only class with Java9 specific code. > > However, when class loading falls back to the root to find the other > classes, there is no module-info there, which is why I believe it fails. > > As to whether best practice would be to have the whole > org.apache.logging.log4j under /META-INF/versions/9/, or to have a > module-info in the root as I did, I don't know enough to tell you. > > > > Full steps below to create the project and reference the clases, if you > need them: > > 1) Netbeans -> File -> New Project -> Java Modular Project call it > "Log4j2TestCasePDW" and platform JDK10 > > 2) Right click Project node -> New -> Module and call it "Log4j2TestCase". > > 3) Right click Project node -> Properties -> Libraries and the click > "Browse" next to the library folder. > Accept the defaults to create a /lib folder and to copy libraries > to the folder > > 4) Still in the Libraries properties, using the ellipsis (...) next to > ModulePath, choose "Add JAR/Folder" and add the following two .jar files > (making sure "copy to library folder" is checked: > log4j-api-2.11.1.jar > log4j-core-2.11.1.jar > > N.B. For any Netbeans devs reading, there seems to be a bit of a minor > bug in NB here - if you highlight both and try and add them both at the > same time, one JAR will go in ModulePath and one in ClassPath. > > 5) Navigate to your Classes node -> <default package>, open > module-info.java and add the following line: > requires org.apache.logging.log4j.core; > > N.B. If you press ctrl-space to bring up code completion after typing > "requires", you will see the modules you can import. the > "org.apache.logging.log4j" > > 6) Copy your test package and .java file under the Classes node > > 7) Right click -> Run on your Log4j2TestCase.java file > > > You will get a console output similar to: > > "02:20:00.367 [main] ERROR log4j2testcase.Log4j2TestCase - > *** Log4j2 error message" > > > Hope that helps, > > P > > > On Wed, Oct 3, 2018 at 12:51 PM Emma Atkinson <emma.atkins...@gmail.com> > wrote: > >> To recreate the test case and Netbeans set up. >> >> - I created a Java Application using the new project function. I set >> it up to run on JDK 10. >> >> >> - I added a module-info.java file using a RMB on Project Navigator > >> Log4j2TestCase > Source Packages > New > Java Module Info... >> >> >> - I created a Library entry (named Apache Log4j2 2.11) that refers to >> the log4j-api-2.11.1.jar via Tools > Libraries pressing New Library... >> button. I only added the one jar, no javadoc, no sources. >> >> >> - Using a RMB on the Project Navigator > Log4j2TestCase > Libraries > >> Add Library... I added the Library entry named Apache Log4j2 2.11. >> >> >> - Using a RMB on the Project Navigator > Log4j2TestCase > Libraries > >> Add JAR/Folder ... I added a separate reference to log4j-api-2.11.1.jar >> and >> log4j-core-2.11.1.jar. Netbeans put the log4j-core-2.11.1.jar on the >> modulepath and added a line to my module-info.java. >> >> >> - RMB on Project Navigator > Log4j2TestCase selected Properties > >> Libraries. I moved the reference to the jar files down into the >> classpath. >> >> >> - I edited the module-info.java file to delete the automatically >> added line >> * requires *org.apache.logging.log4j.core*;* >> >> >> - I added two import statements to the Log4j2TestCase.java >> (containing the main entry point) >> * import* org.apache.logging.log4j.LogManager; >> * import* org.apache.logging.log4j.Logger; >> >> As it stands Log4j will not find its configuration XML file so it will >> say that it is using default setting which means it output errors and above >> and suppresses messages that are warnings, info and debug. >> >> - I created an object called LOGGER. >> >> >> - I created a LOGGER.error("some text "); so that it would output to >> the console under default settings if it ran. >> >> But first we need to build the application. >> >> - Select the module-info.java file and using a RMB menu option to >> Compile File. The ant build script will run and eventually output an >> error >> message saying that it cannot find the module log4j.api. >> >> I hope this is comprehensive enough. >> >> >> >>