如何在maven包上编译classpath资源?

时间:2014-03-26 16:17:37

标签: java eclipse maven jar pom.xml

我将项目作为依赖项包含在另一个项目中。在maven package上,包含的依赖项不会编译为jar,但会创建一个空文件夹。

项目:

main-test (packaging: jar)
main-webservice (packaging: war)

main-webservice项目包括带有pom的jar。

main-test pom.xml:

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.main</groupId>
    <artifactId>test</artifactId>
    <packaging>jar</packaging>
</project>

main-webservice 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>de.main</groupId>
    <artifactId>ws</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>de.main</groupId>
        <artifactId>test</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>
<build><plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
            </plugin>
</plugins></build>
</project>

测试项目的依赖关系在webservice项目中得到解决,因此pom似乎是正确的。

无论如何,如果我运行&#34; mvn package&#34;,main-webservices的资源编译为目标,但libs文件夹包含另一个名为{的文件夹 {1}}。但它是一个文件夹,而不是一个打包的罐子。

这里有什么问题?如何将项目打包为jar而不是文件夹?

2 个答案:

答案 0 :(得分:1)

  

包含依赖项未编译为jar

Maven永远不会编译依赖项。它只是将它们视为原样并将它们放在类路径上或将它们复制到WAR中。但它永远不会改变神器。

这也意味着依赖必须在你的本地仓库中(低于~/.m2/repository/的某个地方)或Maven会不高兴(=失败并出现错误)。

注意:Maven没有大内存。它总是只能在他的小脑中保留一个模块。在Eclipse中,您可以将其他项目添加到构建路径中,但Maven无法执行此操作。要使Maven正常工作,您必须在本地存储库中安装所有依赖项。

答案 1 :(得分:0)

点子:

  • 检查存储库中是否存在jar

  • 检查eclipse中的jar项目是否未在Java Build Path中的war项目中引用

  • 没有eclipse mvn插件就可以了:

    mvn eclipse:clean(适用于两个项目)

    mvn eclipse:eclipse(两个项目)

    mvn clean install(适用于两个项目)