Daemon mit dem exec-maven-plugin Vermeidung von `IllegalThreadStateException`

Ich würde gerne einen daemon-thread, der sollte beginnen, auf der maven Paket-phase. Dies ist, was ich in pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>                                
            </executions>
            <configuration>
                 <mainClass>com.test.Startup</mainClass>
                 <cleanupDaemonThreads>true</cleanupDaemonThreads>
            </configuration>
       </plugin>
  </plugins>
</build>

Und hier ist der Inhalt der Klasse Startup:

public class Startup {

    public static class Testing extends Thread {
        @Override
        public void run() {
            while(true) {
                System.out.println("testing..");
            }
        }
    }

    public static void main(String[] list) throws Exception {
        Testing t = new Testing();
        t.setDaemon(true);
        t.start();
    }
}

Der thread beginnt zu laufen, aber das kompilieren beendet, während der thread ausgeführt wird. Nach einiger Zeit (timeout oder so) der thread gestoppt und die Zusammenstellung weiter. Gibt es trotzdem kann ich diesen thread zu starten, auf den hintergrund und machen die Zusammenstellung selbst Fort?

Ausgabe von maven:

[WARNING] thread Thread[Thread-1,5,com.test.Startup] was interrupted but is still alive after waiting at least 15000msecs
[WARNING] thread Thread[Thread-1,5,com.test.Startup] will linger despite being asked to die via interruption
[WARNING] NOTE: 1 thread(s) did not finish despite being asked to  via interruption. This is not a problem with exec:java, it is a problem with the running code. Although not serious, it should be remedied.
[WARNING] Couldn't destroy threadgroup org.codehaus.mojo.exec.ExecJavaMojo$IsolatedThreadGroup[name=com.test.Startup,maxpri=10]
java.lang.IllegalThreadStateException
    at java.lang.ThreadGroup.destroy(ThreadGroup.java:754)
    at org.codehaus.mojo.exec.ExecJavaMojo.execute(ExecJavaMojo.java:334)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)

Ich bin Planung zu erstellen, die ein socket-listener auf diesen thread und lass Sie Leben in den hintergrund, solange die maven, schaltet der JVM unten, aber derzeit scheint es die Buchse nur für einige Zeit während der Kompilierung.

  • Gut, auf den ersten Blick scheint es, dass cleanupDaemonThreads option ist verantwortlich für ein solches Verhalten. Haben Sie versucht, ihn auf false setzen?
  • oh, scheint, dass hat Prima funktioniert. jetzt nur noch um die tatsächliche Umsetzung.... 🙂 vielen Dank!
  • Du bist herzlich willkommen.
  • Ich hatte ein ähnliches problem mit ExecJavaMojo, Ausführung in team Stadt über Ziele. "exec:java -Dexec.mainClass="com.test.Start" Die Standard-Plug-in aufgerufen wurde, wie es war "kein Vorrang" in der pom-Datei. Ihren Vorschlag hat den trick "exec:java -Dexec.mainClass="com.test.Startup" -Dexec.cleanupDaemonThreads=false"
InformationsquelleAutor drodil | 2012-11-20
Schreibe einen Kommentar