Problems with Quasar and Java Agent

94 views
Skip to first unread message

PhilipH

unread,
Nov 16, 2018, 9:22:37 PM11/16/18
to quasar-pulsar-user
Hi:

Firstly, thank you for the amazing Quasar project.  I've been using it for an AI project and it has been incredibly useful.

I'm having a problem with a recent upgrade to Java 11. I'm using NetBeans 9.0 and Maven on Windows 10.  I put together a very simple HelloWorld app to illustrate my problem. 

package com.acellan.kibihee.quasarhelloworld;

import co.paralleluniverse.fibers.Fiber;

/**
 * @created 16-NOV-2018
 * @author PhilipH
 */
public class QuasarTest {

    public QuasarTest() {
        // default        
    }

    public static void main(String[] args) {
        QuasarTest qt = new QuasarTest();
        qt.test();
    }

    public void test() {
        new Fiber<Void>(() -> {
            System.out.println("Hello! I'm a Quasar Fiber!");
        }).start();
    }
}


... with the following POM:

<?xml version="1.0" encoding="UTF-8"?>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.acellan.kibihee</groupId>
    <artifactId>QuasarHelloWorld</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>co.paralleluniverse</groupId>
            <artifactId>quasar-core</artifactId>
            <version>0.8.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>            

            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>getClasspathFilenames</id>
                        <goals>
                            <goal>properties</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin> 
                        
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId> <!-- Run with "mvn compile maven-dependency-plugin:properties exec:exec" -->
                <version>1.6.0</version>
                <configuration>
                    <mainClass>com.acellan.kibihee.quasarhelloworld.QuasarTest</mainClass>
                    <workingDirectory>target/classes</workingDirectory>
                    <executable>C:/Program Files/Java/jdk-11.0.1/bin/java</executable>
                    <arguments>
                        <!-- Turn off before production -->
                        <argument>-Dco.paralleluniverse.fibers.verifyInstrumentation=true</argument>

                        <!-- Quasar Agent -->
                        <argument>-javaagent:${co.paralleluniverse:quasar-core:jar}</argument>

                        <!-- Classpath -->
                        <argument>-classpath</argument> 
                        <classpath/>

                        <!-- Main class -->
                        <argument>com.acellan.kibihee.quasarhelloworld.QuasarTest</argument>
                    </arguments>
                </configuration>
            </plugin>            
                           
        </plugins>                 
    </build>  
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
</project>

... and an nbactions.xml like this:

<?xml version="1.0" encoding="UTF-8"?>
<actions>
    <action>
        <actionName>debug</actionName>
        <packagings>
            <packaging>jar</packaging>
        </packagings>
        <goals>
            <goal>process-classes</goal>
            <goal>org.codehaus.mojo:exec-maven-plugin:1.6.0:exec</goal>
        </goals>
        <properties>
            <exec.args>-javaagent:C:\Users\PhilipH\.m2\repository\co\paralleluniverse\quasar-core\0.8.0-SNAPSHOT\quasar-core-0.8.0-SNAPSHOT.jar -classpath %classpath com.acellan.kibihee.quasarhelloworld.QuasarTest</exec.args>
            <exec.executable>java</exec.executable>
            <jpda.listen>true</jpda.listen>
        </properties>
    </action>
        
        
</actions>

...and when I run in debug, here's what I get:

JPDA Listening Start...
JPDA Address: PhilipH-PCXXXX
Port:12345
cd D:\Working\JavaProjects\QuasarGradleProject\QuasarHelloWorld; "JAVA_HOME=C:\\Program Files\\Java\\jdk-11.0.1" cmd /c "\"\"C:\\Program Files\\NetBeans 9.0\\java\\maven\\bin\\mvn.cmd\" -Dexec.args=\"-javaagent:C:\\Users\\PhilipH\\.m2\\repository\\co\\paralleluniverse\\quasar-core\\0.8.0-SNAPSHOT\\quasar-core-0.8.0-SNAPSHOT.jar -classpath %classpath com.acellan.kibihee.quasarhelloworld.QuasarTest\" -Dexec.executable=\"C:\\Program Files\\Java\\jdk-11.0.1\\bin\\java.exe\" -Djpda.listen=true -Djpda.address=12345-Dmaven.ext.class.path=\"C:\\Program Files\\NetBeans 9.0\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 org.codehaus.mojo:exec-maven-plugin:1.6.0:exec\""
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.
Scanning for projects...
                                                                        
------------------------------------------------------------------------
Building QuasarHelloWorld 1.0-SNAPSHOT
------------------------------------------------------------------------

--- exec-maven-plugin:1.6.0:exec (default-cli) @ QuasarHelloWorld ---
[quasar] ERROR: while transforming jdk/jfr/internal/EventWriter: null
java.lang.IllegalArgumentException
at co.paralleluniverse.asm.ClassReader.<init>(Unknown Source)
at co.paralleluniverse.asm.ClassReader.<init>(Unknown Source)
at co.paralleluniverse.fibers.instrument.QuasarInstrumentor.instrumentClass(QuasarInstrumentor.java:118)
at co.paralleluniverse.fibers.instrument.QuasarInstrumentor.instrumentClass(QuasarInstrumentor.java:88)
at co.paralleluniverse.fibers.instrument.JavaAgent$Transformer.transform(JavaAgent.java:195)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
[quasar] ERROR: while transforming jdk/internal/vm/PostVMInitHook: null
java.lang.IllegalArgumentException
at co.paralleluniverse.asm.ClassReader.<init>(Unknown Source)
at co.paralleluniverse.asm.ClassReader.<init>(Unknown Source)
at co.paralleluniverse.fibers.instrument.QuasarInstrumentor.instrumentClass(QuasarInstrumentor.java:118)
at co.paralleluniverse.fibers.instrument.QuasarInstrumentor.instrumentClass(QuasarInstrumentor.java:88)
at co.paralleluniverse.fibers.instrument.JavaAgent$Transformer.transform(JavaAgent.java:195)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
[quasar] ERROR: while transforming jdk/internal/vm/PostVMInitHook$2: null
java.lang.IllegalArgumentException


...etc....

Any idea what I'm doing wrong?

Many thanks
Philip


Reply all
Reply to author
Forward
0 new messages