前言
- eclipse 2019-12 (4.14.0)
- jdk 1.8
- Apache Maven 3.6.1
- spring boot 2.2.13.RELEASE
错误
Description Resource Path Location Type
Path must include project and resource name: / (org.apache.maven.plugins:maven-jar-plugin:2.4:jar:default-jar:package)
java.lang.IllegalArgumentException: Path must include project and resource name: /
at org.eclipse.core.runtime.Assert.isLegal(Assert.java:66)
at org.eclipse.core.internal.resources.Workspace.newResource(Workspace.java:2122)
at org.eclipse.core.internal.resources.Container.getFolder(Container.java:205)
at org.sonatype.m2e.mavenarchiver.internal.AbstractMavenArchiverConfigurator.mavenProjectChanged(AbstractMavenArchiverConfigurator.java:220)
at org.sonatype.m2e.mavenarchiver.internal.AbstractMavenArchiverConfigurator$1.build(AbstractMavenArchiverConfigurator.java:165)
at org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:135)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:169)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.lambda$1(MavenBuilder.java:114)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:179)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:114)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.lambda$0(MavenBuilder.java:105)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:179)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:153)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:101)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:88)
at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:197)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:833)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:220)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:263)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:316)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:319)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:371)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:392)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:154)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:244)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
pom.xml /ymsso-admin line 14 Maven Build Problem
原因
- 这个错误只在eclipse中会报出。如果我不用eclipse,而只用mvn命令行编译项目时没有错误。
- 这个错误的大意是:打包成jar时,发现你设置的输出目录未在本项目内(出圈了!)。
- 其实这个错误是eclipse的插件
m2e
引起的,所以只用mvn命令行时,没这个错误。
我的项目时maven的多模块项目,如下:
myapp
├─module1
├─module2
└─admin
└─.pom.xml
我希望打包时,在项目的根目录生成jar,因此改造admin/pom.xml
如下:
<project>
...
<properties>
<main.basedir>${basedir}/..</main.basedir>
...
</properties>
<build>
<directory>${main.basedir}/target/admin</directory>
...
</build>
...
</project>
解决办法1:在maven-jar-plugin插件中配置outputDirectory
将admin/pom.xml
改造为:
<project>
...
<properties>
<main.basedir>${basedir}/..</main.basedir>
...
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<outputDirectory>${main.basedir}/target/admin</outputDirectory>
</configuration>
</plugin>
...
</plugins>
...
<build>
</project>
- 如果 maven-jar-plugin 输出的就是你想要的,那这个方式还是不错的。
- 如果是 spring boot 项目,maven-jar-plugin 输出的不含springboot,不是最终结果,不要用这个方式。
解决办法2:在spring-boot-maven-plugin插件中配置outputDirectory
将admin/pom.xml
改造为:
<project>
...
<properties>
<main.basedir>${basedir}/..</main.basedir>
...
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<outputDirectory>${main.basedir}/target/admin</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
...
<build>
</project>
- 嗯,这个就是适合springboot的解决办法
参考
https://stackoverflow.com/questions/25206689/maven-with-eclipse-error-path-must-include-project-and-resource-name/27562184#27562184