是否可以只使用 eclipse 和 share 构建一次 java 项目?

Posted

技术标签:

【中文标题】是否可以只使用 eclipse 和 share 构建一次 java 项目?【英文标题】:Is it possible to build a java project only once using eclipse and share? 【发布时间】:2016-05-15 00:22:41 【问题描述】:

是否可以实际构建一个包含要构建一次的 java 代码并且可以共享二进制文件的 maven 项目?

问题:我正在尝试构建的项目大约需要 3-4 小时,并且需要很高的互联网带宽。我正在尝试检查在其他几台机器中重新使用这个构建项目的可能性。

我之前处理过涉及 makefile 的 c++ 项目,这非常简单。我是 Java / eclipse 的新手,需要帮助来确定这是否真的可行。

PS: 我确实试图找到现有的解决方案;他们不是直截了当,或者他们说这是不可能的。

【问题讨论】:

【参考方案1】:

构建一次并离线共享

在 Maven 中,您可以只构建一次项目并获得一个包含所有依赖项的 JAR 文件。这样,您就可以将这个 JAR 离线分享给其他机器。

以下是制作它的步骤。

    首先使用以下设置更新您的 pom.xml
 <build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <mainClass>com.thanga.MyTest[REPLACE WITH YOUR MAIN CLASS]</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
    </plugin>
  </plugins>
</build>

    使用目标package assembly:single 打包您的项目,如下所示

在控制台中,

 mvn package assembly:single

在日食中,


    运行这个,你可以得到两个 JAR 文件。其中一个MyFullPack-0.0.1-SNAPSHOT-jar-with-dependencies.jar 拥有完整的 已加载依赖项。


    可以打开JAR查看依赖包如下图。


    您可以离线将此 JAR 共享给其他机器,而无需进行任何构建

【讨论】:

@Siva 这个解决方案只在 maven 中构建一次,你可以与其他机器离线共享【参考方案2】:

是否可以实际构建一个包含要构建一次的 java 代码并且可以共享二进制文件的 maven 项目?

是的,这就是 Maven 的全部意义所在,您构建项目一次,从而生成一个工件(您的 jar/war ...),该工件存储在您的本地 maven 存储库中。

以下命令构建项目并将其保存在本地 repo 中:

mvn clean install 

但是,如果您这样做,您的本地存储库中只有该工件。

一个好的做法是创建一个存储库并将您的工件存储在那里: https://maven.apache.org/repository-management.html

使用以下命令会将快照依赖项存储在存储库中:

mvn clean deploy

然后,您可以通过在新项目的 pom.xml 文件中指定 dependencies 来通过多台计算机重复使用您的组件。

你可能想看看这个指南:

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

您显然需要配置存储库和您的 maven 项目才能使用这种设置。

【讨论】:

我还想提议将 maven 与 Jenkins 集成。 Jenkins 本身不支持构建。但是,它可以通过调用项目中的 pom.xml 文件来触发构建、运行 JUNIT 等。 Jenkins 让您有权决定何时调用 pom.xml 文件、如何调用以及您想对结果执行什么操作。 Jenkins 可以监听不同的事件,例如 svn commit 这是一个强大的想法。例如,您可以要求 Jenkins 在提交新代码时触发构建或运行所有 JUnit 测试,然后,如果单元测试通过,则在目标机器上部署。 我要补充一点,如果你只是想获得你不应该运行 mvn install 的工件,mvn package 会为你编译工件并将它放在你项目的目标文件夹中。【参考方案3】:

首先要做的事情。您的项目是 Web 应用程序(war)还是企业应用程序(ear)或只是一个独立的 Jar?

您可以使用 POM.xml 中的打包标签将您的应用程序打包为 JAR、WAR、EAR

例子:

<packaging>war</packaging>
<packaging>ear</packaging>
<packaging>jar</packaging>

然后运行 ​​mvn clean install

在 project/src/target 中,您应该会看到生成的 jar、war 或 ear,您可以使用它们部署在您的机器或任何其他机器上。

运行安装后,您也可以在 .m2 文件夹中找到它。

【讨论】:

【参考方案4】:

如果您使用 maven,mvn install 会将您的二进制文件安装到您的 $home/.m2 文件夹中。这些二进制文件将可用于将在同一台机器上运行的所有其他 maven 作业。

如果您需要在多台机器之间共享您的二进制文件,您可以将您的 jars 部署到存储库,例如 nexus 或 artifactory。

【讨论】:

【参考方案5】:

您可以只获取目标文件夹的 jar 文件并将其复制到其他机器,否则您可以使用诸如 nexus oder artifactory 之类的共享存储库来共享您构建的二进制文件。 Maven 能够自动将工件部署到这些存储库中

【讨论】:

以上是关于是否可以只使用 eclipse 和 share 构建一次 java 项目?的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse启动时提示Failed to load the JNI shared library jvm.dll

Eclipse打不开。The Eclipse executable launcher was unable to locate its companion shared library

使用 Eclipse 通过 SSH 在远程服务器上构建和调试项目

ubuntu18.04下eclipse配置及快捷方式创建

git share 后 Eclipse maven EAR 项目不工作

关于析构函数和构造函数何时调用的小例子