2016-07-15 5 views
3

WARUM führt das folgende zu einem Buildfehler? Ich erstellte eine Klasse, die vor ausführen sollte Maven beginnt, den Build auszuführen.Wie führe ich eine Klasse vor der Erstellung von Maven?

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.5.0</version> 
      <executions> 
       <execution> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>my.package.CustomClass</mainClass> 
      </configuration> 
     </plugin> 

Ergebnisse in einem Build failure:

java.lang.ClassNotFoundException: my.package.CustomClass 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:281) 
    at java.lang.Thread.run(Thread.java:745) 
+0

wenn Sie von einem sauberen Build ausgeführt wird, werden Sie nicht eine kompilierte Version dieser Klasse haben, so kann es nicht ausgeführt werden. Vielleicht, wenn Sie ein bisschen mehr darüber sagen, warum Sie das tun wollen, können wir etwas anderes herausfinden. – dcsohl

+0

Wie könnte eine Hauptklasse ausgeführt werden, bevor sie überhaupt kompiliert wird? Vielleicht möchten Sie die Ausführung an die Phase 'process-classes' binden? – Seelenvirtuose

+0

@Seelenvirtuose Ich brauche eine 'public static void main'-Klasse, die vor' generate-sources' ausgeführt wird, um einige Eigenschaften für die Webservice-Authentifizierung eines externen wsdl-Dienstes zu initialisieren. – membersound

Antwort

0

Gerade die Phase ändern (wie 'Test' oder 'install'), wo die Maven ausführt, so dass, wenn die Klasse läuft Plugin wird es in verfügbar sein classpath. (im Fall, wenn Sie wirklich nicht, dass auf eine andere Abhängigkeit bewegen)

<plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.5.0</version> 
      <executions> 
       <execution> 
        <phase>test</phase> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>my.package.CustomClass</mainClass> 
      </configuration> 
     </plugin> 
+1

OP erklärt, dass er die Ausführung in der "generate-sources" -Phase benötigt. Eine besser geeignete Phase wären außerdem "Prozessklassen". – Seelenvirtuose

Verwandte Themen