【问题标题】:How to compile classpath resources on maven package?如何在 maven 包上编译类路径资源?
【发布时间】:2014-05-05 05:07:09
【问题描述】:

我将一个项目作为依赖项包含在另一个项目中。在 maven package 上,包含的依赖项没有编译为 jar,而是创建了一个空文件夹。

项目:

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

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

主测试 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似乎是正确的。

无论如何,如果我运行“mvn package”,main-webservices 的资源将编译到目标,但libs 文件夹包含另一个名为main-test-1.0.jar文件夹。但它是一个文件夹,而不是一个打包的 jar。

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

【问题讨论】:

  • 我以前从未见过这种情况。您可能需要发布更多的 pom,问题显然不在于您提供的小 sn-p。
  • 见上面我的更新。我注意到:当我在我的 main-webservice 项目的 eclipse 中查看 maven 库视图时,依赖项 main-test 也不是作为 jar 包含,而是作为文件夹包含。
  • 在 Eclipse 中它是正常的,它的“工作区解析”就是这样做的。基本上它的 Eclipse 告诉您它的依赖项由工作区中的另一个项目管理。
  • "包含的依赖没有编译为 jar" -> Maven 从不编译依赖。它只是按原样获取它们,然后将它们放在类路径中或将它们复制到 WAR 中。但它从不更改工件。

标签: java eclipse maven jar pom.xml


【解决方案1】:

包含的依赖没有被编译为 jar

Maven 从不编译依赖项。它只是按原样获取它们,然后将它们放在类路径中或将它们复制到 WAR 中。但它永远不会改变工件。

这也意味着依赖项必须在您的本地存储库中(位于~/.m2/repository/ 下方),否则 Maven 将不满意(= 因错误而失败)。

注意:Maven 没有大内存。它总是只能在他小小的大脑中保留一个模块。在 Eclipse 中,您可以将另一个项目原样添加到构建路径中,但 Maven 不能这样做。要使 Maven 正常工作,您必须在本地 repo 中安装所有依赖项。

【讨论】:

  • 嗯好的。那么,当我在我的 webservice 项目上运行 'mvn package' 时,是否有机会告诉 maven 自动将 install 引用的打开工作区项目放入 repo 中?
【解决方案2】:

想法:

  • 检查 jar 是否存在于您的存储库中

  • 检查java Build Path中war项目是否没有引用eclipse中的jar项目

  • 不使用eclipse mvn插件:

    mvn eclipse:clean(两个项目)

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

    mvn clean install(两个项目)

【讨论】:

  • 嗯该文件在 maven .m2 存储库中不存在,因为我想防止必须直接 install 将 jar 放入 depo。我只想让 maven 找到并构建它,因为我的工作区中都打开了两个项目。
猜你喜欢
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多