【问题标题】:Maven install changes jarMaven 安装更改 jar
【发布时间】:2016-01-09 15:32:59
【问题描述】:

我使用创建 jar 的外部程序。该操作的代码如下:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <configuration>
                        <tasks>
                            <property environment="env" />
                            <property name="appname" value="hellojavaworld" />
                            <echoproperties />
                            <exec dir="" executable="respawn.exe" searchpath="true">
                                <arg value="${basedir}\src\main\java\${appname}.app" />
                            </exec>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

创建的 jar 由 respawn.exe 生成,稍后在构建过程中使用。我想使用最合适的方法,将 3rd 方 jar 安装到本地 maven 存储库。为此,使用以下命令:

mvn install:install-file -Dfile...

这按设计工作。我想创建将在构建期间使用的 pom.xml 文件(父子),因此创建的 jar 将被复制到本地 maven 存储库。我做不到,因为 maven 创建了自己的 jar 并复制到本地存储库。问题是如何更改 Maven 以使用不同的 jar?我不想复制创建 maven 的 jar,因为它与 respawn.exe 创建的 jar 不同。

Jar comparison 这个链接描述了这些罐子的区别。您可以看到右侧的 jar(maven 本地存储库)缺少带有相应类的 abc 文件夹。

问题是为什么?

【问题讨论】:

  • 您已经在其中一个 jar 中的 Meta-Inf 文件夹中。元信息之外是什么?
  • 好吧,如果我转到 maven 创建的 jar,它只包含文件夹 META-INF,但原始 jar 包含一个带有类的文件夹。这在 maven jar 中是正确的。那是什么?

标签: java eclipse maven jar maven-install-plugin


【解决方案1】:

Maven 会将 Java 源文件 (*.java) 从 src/main/java 编译成 target/classes。这些类将被 Maven 打包到 jar 中。

PS这里只显示了 Maven 默认位置。

看你的问题,你好像没有Java源文件。

【讨论】:

  • 确实如此。但是,另一方面,我可以通过上面的命令 mvn install 将 3rd 方 jar 安装到本地存储库。所以这可能有效。我想使用 ant run 插件调用外部 exe,并将创建的 jar 安装到 maven 本地存储库。我不知道该怎么做。有什么意见吗?
  • Maven 命令mvn install:install-file 用于将jar 上传(部署)到本地Maven 存储库。它不会改变 jar 的内容!
  • 问题是:左边的jar(zip)是如何创建的,右边的jar(zip)是如何创建的?看起来右边的那个是用 Maven 创建的,因为存档包含一个 Maven 目录。左边的那个是在没有 Maven 的情况下创建的,因为它没有那个容器。
  • 重点是左边的jar是使用pom.xml中指定的maven-antrun-plugin创建的。问题是,jar 是由外部 exe 程序生成的,而不是由 Maven 生成的。 Maven 只是使用 antrun 插件来调用外部 exe。如果我为此 pom.xml 执行 mvn install,它只会在右侧创建没有结构的 jar(abc,..)。它按设计工作。但是如果我执行 mvn install:installfile 和这个 jar 的路径(之前由 exe pgm 创建),它是正确的。问题是如何通过使用antrun插件调用外部exe程序产生不是maven jar的pom.xml安装jar?
  • 好的,这使得设置和问题更加清晰。点为什么要创建一个带有 Ant 的 jar 从 Maven 调用 Ant?然后通过 Maven 将创建的 jar 部署到 Maven 存储库?为什么不从 Ant Task Exec (ant.apache.org/manual/Tasks/exec.html) 或 Ant Task Java (ant.apache.org/manual/Tasks/java.html) 调用 mvn install:install-file
猜你喜欢
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
相关资源
最近更新 更多