【问题标题】:Packaging jar file with source code using Maven so breakpoints can be used in Eclipse使用 Maven 将 jar 文件与源代码打包,以便可以在 Eclipse 中使用断点
【发布时间】:2021-02-27 17:55:21
【问题描述】:

要求

我正在重构 Java 应用程序,并试图将代码从 war 文件中移出到 jar 文件中,以便可以在许多不同的 Web 应用程序中使用它。但是,其中一项要求是开发人员仍然需要在库中使用断点。为此,我相信我需要将源代码与编译后的代码打包在一起。下面是构建生命周期

构建生命周期

<build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven 
            defaults (may be moved to parent pom) -->
        <plugins>
            <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
            <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
            </plugin>

            <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
            </plugin>
            <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
            <plugin>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.7.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

问题

当我运行 mvn packagemvn source:jar package 时,它分别创建了两个 jar 文件

  • db-0.0.1-SNAPSHOT.jar
  • db-0.0.1-SNAPSHOT-sources.jar

然后我可以将源附加到依赖项。

我的问题有两个

  1. 有没有办法把源代码和编译好的类打包成同一个jar文件,和
  2. 这是否会自动将源代码附加到 Eclipse 中的依赖项,以便开发人员无需自动执行此操作?

【问题讨论】:

  • 首先您的所有配置都在插件管理中完成,其中 pluginManagement 旨在定义所用插件的版本等。但是您必须在 pluginManagement 区域之外添加 maven-source-plugin ... 进一步打包将源代码放入现有 JAR 没有意义,也不是一个好主意,因为没有 IDE 能够正确识别。使用由 IDE 标识的单独 jar (-sources)... 在 Eclipse 中,您可以配置 -sources 包的下载,请参阅 Eclipse 的文档...

标签: eclipse maven jar jave


【解决方案1】:

将源代码放入 JAR 是错误的做法。

您创建了两个 JAR(如您的问题所示)。这些 JAR 转到存储库。然后每个使用 JARS 的人也会自动获得-sources。在通常的 IDE 中,如 Eclipse 和 IntelliJ,-sources JAR 会自动用于调试。

您应该将源插件添加到您的 POM,而不是两个 Maven 运行。然后在正常构建期间创建-sources JAR。

【讨论】:

  • 好的,如果是 -sources 格式,eclipe 会自动使用它进行调试?
猜你喜欢
  • 2021-04-01
  • 2019-09-08
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 2014-07-18
  • 1970-01-01
相关资源
最近更新 更多