Ошибка «Невозможно создать каталог» в плагине Maven JAXB, но только один раз - PullRequest
0 голосов
/ 19 июня 2019

В моей сборке Maven я использую jaxb2-maven-plugin:2.2 для генерации классов из файла схемы XML.Это единственные файлы Java в проекте, то есть нет не сгенерированных файлов Java.

Когда я запускаю mvn compile с чистым проектом, я сталкиваюсь со следующей ошибкой:

[ERROR] Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:2.2:xjc (xjc) on project awap: Unable to create directory D:\myproject\target\classes\ -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:2.2:xjc (xjc) on project awap: Unable to create directory D:\myproject\target\classes\
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
    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:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
Caused by: org.apache.maven.plugin.MojoExecutionException: Unable to create directory D:\myproject\target\classes\
    at org.codehaus.mojo.jaxb2.javageneration.AbstractJavaGeneratorMojo.performExecution(AbstractJavaGeneratorMojo.java:482)
    at org.codehaus.mojo.jaxb2.AbstractJaxbMojo.execute(AbstractJaxbMojo.java:257)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    ... 21 more
Caused by: java.io.IOException: Unable to create directory D:\myproject\target\classes\
    at org.codehaus.plexus.util.FileUtils.forceMkdir(FileUtils.java:1615)
    at org.codehaus.mojo.jaxb2.javageneration.AbstractJavaGeneratorMojo.performExecution(AbstractJavaGeneratorMojo.java:439)
    ... 24 more

Но после запуска каталог target/classes действительно существует!И действительно, если я попытаюсь mvn compile во второй раз (без промежуточной очистки), сборка завершится успешно.

Та же ошибка возникает с самой последней версией плагина 2.4.

Просмотр source функции, которая выдает исключение, я вижу, что File.mkdirs() вызывается.Почему это возвращается false, я не знаю.В конце концов, каталог действительно создается в какой-то момент ...

Почему это происходит и как я могу сделать свою сборку успешной в первый раз?

1 Ответ

0 голосов
/ 20 июня 2019

Так что я мог бы косвенно решить это.Я пометил (нестандартный) каталог, в котором классы были сгенерированы, как исходный каталог в maven.

Я изменил это так, чтобы классы генерировались в значение по умолчанию target/generated-sources, и удалил лишнюю исходную папку.Это заставило ошибку исчезнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...