问题描述
我正在尝试在具有单独配置的maven插件中包含两个执行块,但是maven似乎忽略了执行块中的配置块,而只在执行块外使用了配置块.
I'm trying to have two execution blocks inside a maven plugin with separate configurations, but maven seems to ignore the configuration blocks inside the execution blocks and only uses the configuration block outside the executions block.
因此,为了缩小问题的范围,我打开了一个有效的插件部分,并将工作配置稍微移到执行块的内部,然后停止工作(wsdl仍然被拾取(实际上两个都被拾取)),但这仅仅是因为它位于默认目录中,而当配置部分位于执行块内部时,将拾取绑定文件和其他配置中的非配置文件,实际上,它甚至不应该知道第二个wsdl,因为我尚未在任何地方指定):
So to narrow down the problem, I took a working plugin section and moved the working configuration just slightly up towards the inside of the execution block and then it stopped working (the wsdl is still being picked up (actually both are), but that's simply because it's sitting in the default directory, the binding file and non of the other configuration is being picked up when the configuration section is sitting inside the execution block and in fact, it should not even be aware of the second wsdl since I haven't specified it anywhere):
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>wsdla</id>
<phase>generate-sources</phase>
<configuration>
<packageName>com.mycee.project.model</packageName>
<sourceDestDir>src/main/java</sourceDestDir>
<wsdlFiles>
<wsdlFile>
${basedir}/src/wsdl/a.wsdl
</wsdlFile>
</wsdlFiles>
<bindingDirectory>
${basedir}/src/wsdl/binding
</bindingDirectory>
<verbose>true</verbose>
</configuration>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
这是我需要解决的Maven问题还是jaxws问题,我该如何解决?
Is this a maven issue I need to resolve or a jaxws issue and how do I resolve this?
如果将版本更改为2.3,则会出现以下错误:
If I change the version to 2.3, I get the following error:
[错误]无法在项目mycee-project上执行目标org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.3:wsimport(default-cli):执行目标org.jvnet的default-cli. jax-ws-commons:jaxws-maven-plugin:2.3:wsimport失败:字符串索引超出范围:-1-> [帮助1]
[ERROR] Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.3:wsimport (default-cli) on project mycee-project: Execution default-cli of goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.3:wsimport failed: String index out of range: -1 -> [Help 1]
运行mvn clean jaxws:wsimport -X我可以在调试输出中看到它正在使用默认值:
running mvn clean jaxws:wsimport -XI can see in the debug output that it's using the defaults:
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.3:wsimport (default-cli)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<bindingDirectory default-value="${basedir}/src/jaxws"/>
<destDir default-value="${project.build.outputDirectory}"/>
<encoding>${project.build.sourceEncoding}</encoding>
<extension default-value="false"/>
<genJWS default-value="false"/>
<implDestDir default-value="${project.build.sourceDirectory}"/>
<keep default-value="true"/>
<localRepository default-value="${localRepository}"/>
<pluginArtifactMap>${plugin.artifactMap}</pluginArtifactMap>
<quiet default-value="false"/>
<remoteRepositories default-value="${project.pluginArtifactRepositories}"/>
<settings>${settings}</settings>
<sourceDestDir default-value="${project.build.directory}/generated-sources/wsimport"/>
<staleFile default-value="${project.build.directory}/jaxws/stale"/>
<verbose default-value="false"/>
<wsdlDirectory default-value="${basedir}/src/wsdl"/>
<xadditionalHeaders default-value="false"/>
<xdebug default-value="false"/>
<xdisableAuthenticator default-value="false"/>
<xdisableSSLHostnameVerification default-value="false"/>
<xnoAddressingDataBinding default-value="false"/>
<xnocompile default-value="true"/>
<xuseBaseResourceAndURLToLoadWSDL default-value="false"/>
<project default-value="${project}"/>
</configuration>
[DEBUG] =======================================================================
索引超出范围错误的调试输出:
The debug output for the index out of range error:
[ERROR] Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.3:wsimport (default-cli) on project mycee-project: Execution default-cli of goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.3:wsimport failed: String index out of range: -1 -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.3:wsimport (default-cli) on project mycee-project: Execution default-cli of goal org.jvnet.jax-ws-c
ommons:jaxws-maven-plugin:2.3:wsimport failed: String index out of range: -1
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:225)
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:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
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)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-cli of goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.3:wsimport failed: String index out of range: -1
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:110)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 19 more
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:872)
at java.lang.StringBuilder.substring(StringBuilder.java:72)
at org.jvnet.jax_ws_commons.jaxws.AbstractJaxwsMojo.getCP(AbstractJaxwsMojo.java:484)
at org.jvnet.jax_ws_commons.jaxws.AbstractJaxwsMojo.exec(AbstractJaxwsMojo.java:359)
at org.jvnet.jax_ws_commons.jaxws.WsImportMojo.processLocalWsdlFiles(WsImportMojo.java:319)
at org.jvnet.jax_ws_commons.jaxws.WsImportMojo.execute(WsImportMojo.java:283)
at org.jvnet.jax_ws_commons.jaxws.MainWsImportMojo.execute(MainWsImportMojo.java:50)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
... 20 more
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
按要求的全pom:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycee</groupId>
<artifactId>mycee-project</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>mycee</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<slf4j.version>1.7.2</slf4j.version>
</properties>
<repositories>
</repositories>
<pluginRepositories>
</pluginRepositories>
<dependencies>
<!-- Junit4 Dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- XML Dependencies -->
<dependency>
<groupId>javax.xml</groupId>
<artifactId>webservices-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.8</version>
</dependency>
<!-- Log Dependencies -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>basic</id>
<phase>generate-sources</phase>
<configuration>
<packageName>com.mycee.project.model</packageName>
<sourceDestDir>src/main/java</sourceDestDir>
<wsdlFiles>
<wsdlFile>
${basedir}/src/wsdl/wsdla.wsdl
</wsdlFile>
</wsdlFiles>
<bindingDirectory>
${basedir}/src/jaxws/binding
</bindingDirectory>
<verbose>true</verbose>
<target>2.1</target>
</configuration>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
推荐答案
您的pom应该如下所示:
Your pom should look like this:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<id>basic</id>
<phase>generate-sources</phase>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<packageName>com.mycee.project.model</packageName>
<wsdlFiles>
<wsdlFile>${basedir}/src/wsdl/wsdla.wsdl</wsdlFile>
</wsdlFiles>
<bindingDirectory>${basedir}/src/jaxws/binding</bindingDirectory>
<verbose>true</verbose>
<target>2.1</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
问题是基于您在pluginManagement块中而不是在build块中完成所有工作,这意味着它并未真正执行.
The problem is based on that you do all stuff in the pluginManagement block and not in build block which means it's not really executed.
这篇关于Maven忽略执行配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!