Trejkaz created LOG4J2-1925:
-------------------------------

             Summary: Having log4j-core on the compile classpath somehow breaks 
compilation even if I'm not calling it
                 Key: LOG4J2-1925
                 URL: https://issues.apache.org/jira/browse/LOG4J2-1925
             Project: Log4j 2
          Issue Type: Bug
          Components: Core
    Affects Versions: 2.8.2, 2.7
         Environment: Oracle JDK 8
            Reporter: Trejkaz
            Priority: Blocker


Background: Almost a week ago, our build started breaking with weird errors on 
Javadoc. Initially only one user and the build machine were seeing it, but it 
gradually spread and now happens for everyone on the team.

Yesterday I spent most of the day investigating it and have cut it down to a 
fairly minimal project, which I uploaded here: 
https://github.com/trejkaz/gradle_wtf_compile

The project name does contain "gradle" because at the time we had assumed 
Gradle was to blame. However, this has since been removed from the list of 
potential culprits, and all that's left now is log4j and javac itself. Given 
that Oracle are near to useless at fixing even critical bugs, I figured 
reporting it here would be a good next step in case it turns out to be log4j's 
fault.

Basically, if I have code like this:

{code:java}
/**
 * Example utility class.
 */
public class Utils
{
    /**
     * Does stuff
     *
     * @throws Exception if an error occurs.
     */
    public static void checkProject1() throws Exception
    {
        // empty
    }

    // ...
}
{code}

And I try to build the code:

{code:sh}
mkdir -p build/classes/main

javac -source 1.8 -target 1.8 -d build/classes/main \
  -classpath 
$HOME/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.8.2/979fc0cf8460302e4ffbfe38c1b66a99450b0bb7/log4j-core-2.8.2.jar:$HOME/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.8.2/e590eeb783348ce8ddef205b82127f9084d82bf3/log4j-api-2.8.2.jar
 \
  -Xlint:all,-serial -Xdoclint:all,-missing \
  src/main/java/com/acme/Utils.java
{code}

I get an error:

{noformat}
src/main/java/com/acme/Utils.java:13: error: invalid use of @throws
     * @throws Exception if an error occurs.
       ^
src/main/java/com/acme/Utils.java:23: error: invalid use of @throws
     * @throws RuntimeException if an error occurs.
       ^
src/main/java/com/acme/Utils.java:33: error: invalid use of @throws
     * @throws IOException if an error occurs.
       ^
3 errors
{noformat}

The error message supposedly occurs when the thing you provided is not an 
exception, but that is not the case at all.

If I remove log4j-core from the classpath, compilation succeeds. If I remove 
-Xdoclint from the command-line, that dodges the problem during javac, but then 
javadoc fails later in the build, so it isn't a solution.

I have many questions...

1. How does just having this one jar on the classpath somehow break compilation 
when I'm not even calling it?
2. How is it that we are the first ones to encounter this? I'm seeing it on 
literally every platform, and have tested multiple versions of Java 8 that I 
had on hand, and all of them behaved the same way. Maybe nobody is using Java 8 
and log4j in the same project yet, but it seems a bit unlikely.




--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to