如何在maven构建之前运行一个类?

3
为什么以下内容会导致构建失败?我创建了一个类,应该在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>

构建失败的结果:
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)

如果您正在运行干净的构建,那么您将没有该类的已编译版本,因此无法运行。也许如果您多说一些为什么要这样做,我们可以想出其他解决方案。 - dcsohl
一个主类怎么可能在编译之前就被执行了呢?也许你想将执行绑定到“process-classes”阶段? - Seelenvirtuose
@Seelenvirtuose 我需要一个 public static void main 类在 generate-sources 之前运行,以初始化外部 wsdl 服务的 webservice 认证属性。 - membersound
1
@membersound 那么这个类应该是另一个项目的一部分,该项目构建自己的工件。然后,此依赖项应在插件配置的依赖项部分中列出。 - Seelenvirtuose
那么在只需要该类的项目中无法包含它吗? - membersound
显示剩余3条评论
1个回答

0
只需要更改 Maven 执行的阶段(如“test”或“install”),这样当插件运行该类时,它将在类路径中可用。(如果您真的无法将其移动到另一个依赖项中)
<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解释说他需要在“generate-sources”阶段执行。此外,更适合的阶段是“process-classes”。 - Seelenvirtuose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接