【问题标题】:mvn exec:java throws ClassNotFoundException when executed on Jetbrains TeamCitymvn exec:java 在 Jetbrains TeamCity 上执行时抛出 ClassNotFoundException
【发布时间】:2019-08-07 05:01:08
【问题描述】:

我在 Jetbrain 的 TeamCity 上执行 maven exec:java 时遇到了问题。该配置在本地没有任何问题,但在 TC 上它会不断抛出:

java.lang.ClassNotFoundException: "…"
    at java.net.URLClassLoader.findClass (URLClassLoader.java:382)
    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:270)
    at java.lang.Thread.run (Thread.java:748)
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project …: An exception occured while executing the Java class. "…"

TC 配置相当简单:

  • 目标:clean install exec:java
  • 其他命令行参数:-DskipTests -Dexec.mainClass="…" -Dexec.args="…"

基本上是我在本地使用的。但是使用 TC 会引发上述异常。

我尝试将当前工件显式设置为依赖项并将编译依赖项配置为类路径:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
    <dependencies>
        <dependency>
            <groupId>…</groupId>
            <artifactId>…</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <classpathScope>compile</classpathScope>
    </configuration>
</plugin>

但没有任何运气。任何帮助将不胜感激。

【问题讨论】:

  • Caused by 例外吗?尝试使用调试信息从命令行在 teamcity 代理上运行 mvn 命令。也许你会看到问题
  • 很遗憾没有Cuased by。我会尝试从命令行运行它,但我们将它 dockerized 并且一切都是临时的,这使得它有点棘手
  • 调试输出看起来不错``` [13:20:31] : [Step 1/1] [DEBUG] 收集的项目类路径 [/opt/teamcity/buildAgent/work/dbebb49e09b39be3/target/类] [13:20:31]:[步骤 1/1] [调试] 添加到类路径:文件:/opt/teamcity/buildAgent/work/dbebb49e09b39be3/target/classes/ ... [13:20:31]:[ Step 1/1] [DEBUG] 加入线程 Thread["….SummaryGenerator".main(),5,"….SummaryGenerator"] [13:20:31]W: [Step 1/1] [WARNING] [ 13:20:31] : [步骤 1/1] java.lang.ClassNotFoundException: "….SummaryGenerator" ``

标签: java maven teamcity


【解决方案1】:

尝试在&lt;configuration&gt; 标签中添加&lt;mainClass&gt;,如下所示:

<configuration>
    <mainClass>com.category.main.Master</mainClass>
    <classpathScope>compile</classpathScope>
</configuration>

然后使用命令mvn exec:java -Dexec.mainClass=src.com.category.main.Master运行

【讨论】:

  • 已经试过了,但是没用。如果我想拥有多个课程,那么我将不得不使用执行(与特定阶段相关)
【解决方案2】:

一切都归结为 Additional Maven command line parameters: 中的引号 - TC 将它们作为参数传递,因此 -Dexec.mainClass="some.package.Class" became"some.package.Class"in maven (instead ofsome.package.Class`)

当我比较本地和远程运行的调试时,我终于注意到了:

  • 远程:
[DEBUG] joining on thread Thread["my.package.SummaryGenerator".main(),5,"my.package.SummaryGenerator"]
  • 本地:
[DEBUG] joining on thread Thread[my.package.SummaryGenerator.main(),5,y.package.SummaryGenerator]

【讨论】:

    猜你喜欢
    • 2020-04-10
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多