鉴于以下pom.xml:
<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.myApp</groupId>
<artifactId>malloc</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<repositories>
<repository>
<id>project</id>
<url>file:///${basedir}/lib</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.myApp</groupId>
<artifactId>myApp.core</artifactId>
<version>1.0.0</version>
</dependency>
... //other dependencies
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
<webResources>
<webResource>
<directory>${project.build.directory}/WebContent/WEB-INF</directory>
<includes>
<include>web.xml</include>
</includes>
<targetPath>WEB-INF</targetPath>
<filtering>true</filtering>
</webResource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/WebContent/WEB-INF/lib</outputDirectory>
<includeScope>runtime</includeScope>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
以下项目结构:
我希望maven-dependency-plugin会将所有依赖项复制到WebContent / WEB-INF / lib但是当我运行时
mvn clean install
生成以下错误:
[INFO] Scanning for projects...
[INFO]
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building api-malloc 0.0.1
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for com.oracle:ojdbc6:jar:10.2.0.4.0 is missing, no dependency information available
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ api-malloc ---
[INFO] Deleting C:\Development\malloc\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ api-malloc ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ api-malloc ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 8 source files to C:\Development\malloc\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/Development/malloc/src/com/myApp/api/malloc/dto/RegionTypeDTO.java:[3,34] package com.myApp.api.core.dto does not exist
[ERROR] /C:/Development/malloc/src/com/myApp/api/malloc/dto/RegionTypeDTO.java:[5,39] cannot find symbol
symbol: class IDTO
[INFO] 26 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.209 s
[INFO] Finished at: 2015-11-26T15:33:40-05:00
[INFO] Final Memory: 21M/227M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project malloc: Compilation failure: Compilation failure:
[ERROR] /C:/Development/malloc/src/com/myApp/api/malloc/dto/RegionTypeDTO.java:[3,34] package com.myApp.api.core.dto does not exist
[ERROR] /C:/Development/malloc/src/com/myApp/api/malloc/dto/RegionTypeDTO.java:[5,39] cannot find symbol
[ERROR] symbol: class IDTO
[ERROR] location: class com.myApp.api.malloc.controllers.TestController
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[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/MojoFailureException
我注意到WEB-INF / lib文件夹总是空的,不会复制maven依赖项。
我怀疑copy-dependencies插件在编译阶段之前没有运行但是我无法弄清楚 - 我错过了什么?
答案 0 :(得分:1)
如果编译失败,则确实永远不会执行copy-dependencies
目标,因为它绑定到package
阶段,该阶段在compile
阶段之后(默认情况下与之相关联) Maven编译器插件)。
如果您希望它在compile
阶段之前运行,则需要更改copy-dependencies
目标执行的阶段值。更改为process-resources
应该没问题,也应该有意义。
<phase>package</phase>
有关阶段的完整说明,您可以查看官方文档here。
您还应该修复构建输出指向的编译错误。我看到sourceDirectory
元素覆盖了Maven默认使用的Java源代码(src\main\java
),因此我认为您的代码直接位于src
文件夹下。
更新:当代码引用Java编译器未解析的包时发生the package X does not exist
错误,因此它无法在类路径中看到该包,这意味着声明的依赖项:myApp.core
是否包含该包和类?如果是,则存储库元素(lib文件夹)可能无法正确提供myApp依赖项。
您可以尝试使用指定的here Maven安装插件在.m2
maven缓存中本地安装依赖项。
您可以从命令行执行如下操作:
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file
-Dfile=lib\myApp.core-1.0.0.jar \
-DgroupId=com.myApp \
-DartifactId=myApp.core \
-Dversion=1.0.0 \
-Dpackaging=jar \
旁注:Maven更喜欢小写的groupid和artifactid令牌。此外,Maven约定也使用破折号分隔标记(即myApp
),而不是使用Camel Case(即myapp-core
)。