当前位置: 首页 > 知识库问答 >
问题:

我需要配置Maven项目依赖树,但*不是为我配置的*-它只适用于那些通过Maven Central使用我的项目的人

岳涵煦
2023-03-14

我有一个新的库,叫做代码。它依赖于我创建的另外两个库,称为Template Featherweight和XBN-Java。但主要的库--我正试图让其他人使用的库!--是Codelet。另外两个是次要的。两者都是必需的,但只有在需要高级特性时才直接使用。

    null
    null

我终于通过mvn deploy将JAR上传到Maven Central,至少上传到一次,这是一个很大的进步。

然而,我意识到,为了让其他人真正使用Codelet,他们需要在Codelet的POM中映射出整个依赖树。我相信这是正确的。

我担心的是,在三个POM中映射这个三个项目的依赖关系树,基本上需要我在Maven中复制我的Ant构建过程。我满怀希望地希望我不需要这样做,因为Ant对我来说很好,而Maven和我并不合得来。

    null

模板Featherweight 0.1.0取决于

  • com.github.aliteralmind/XBNJava/0.1.3(及其依赖项)

Codelet 0.1.0依赖于

    null
{@.codelet.and.out com.github.mylibrary.examples.AGoodExample}

这些可选的“Codelet类”称为“自定义器”,在运行javadoc.exe之前进行编译。它们用于自定义示例代码的显示方式。编译后,Codelet将通过javadoc.exe自动执行,所有内联标记也是如此。)

对于核心编译来说,它几乎是线性的:

  1. xbn-java是根
  2. 模板特征依赖于XBN-Java,并且
  3. 代码集依赖于模板特征
<dependencies>
    <dependency>
        <groupId>com.github.aliteralmind</groupId>
        <artifactId>templatefeather</artifactId>
        <version>0.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.github.aliteralmind</groupId>
        <artifactId>codelet</artifactId>
        <version>0.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.3.2</version>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>16.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
</dependencies>

我不明白dependenciesdependencymanagement之间的区别(为什么一些dependencies块可以直接进入项目本身,而其他块是dependencymanagement中的子块...尽管它似乎与父-子有关),我也不明白“javadoc”如何适合“scope”属性。虽然compiletest被明确列出,但页面上甚至不存在“doc”这个词。

我希望你能给我一些建议。谢谢你。

共有1个答案

訾高飞
2023-03-14

如果您的代码需要一些东西,但不是为了编译时(只是为了运行时),那么声明依赖项,但添加一个运行时作用域。

现在,如果您想提供一个“starter parent”pom.xml,那么就发布一个“starter parent”pom.xml,但不要在实际的构建链中使用它。

 类似资料:
  • 我工作的地方使用Maven,我们有很多内部库。我们尝试以向后兼容的方式进行更改,但有时我们的一个库需要另一个库的较新版本。如果最终产品没有加入较新的库版本,这可能会导致问题。 由于我们有很多库,如果最终产品使用了库A、B和C,而A和B都使用了不同版本的C,那么并不总是使用最新版本的C。从介绍到依赖机制: 依赖项中介--这确定当遇到工件的多个版本时,将使用依赖项的哪个版本。目前,Maven2.0只支

  • 问题内容: 我有一个简单的Java 9 SE项目,该项目仅依赖于一个非模块化项目(在本示例中选择Weld SE),并且尝试使用Maven()构建它。为了添加Java 9,我添加了。最初,此文件仅包含模块名称,没有公式。 请记住,我唯一的依赖是不是一个模块化的项目,因此,我认为Maven会放在类路径中(不模块路径),因此它会在结束中描述的模块化系统的状态。 现在,我的Maven版本是3.3.9,并且

  • 我在Stackoverflow上看到过类似的问题,但没有一个解决了这个问题。我刚刚从Expo桌面应用程序创建了一个新的ReactNative项目。但当Expo配置设置为LAN模式时,我无法通过二维码扫描在Android手机上运行它。在我的Android手机上似乎无法访问(看起来像)。我的手机在同一个Wifi网络上。 我还尝试通过关闭防火墙来运行Expo演示应用程序,但仍然没有成功。我相信你的一个技

  • 在我的spring项目中,我可以像这样用XML定义bean:

  • 问题内容: 我有一个简单的java maven项目。我执行时的一个类需要从类路径中加载xml配置文件。我不想在生成jar时打包此类xml文件,但我想在conf子文件夹下的zip程序集中包含默认的xml文件,并且我也希望此默认xml在单元测试中可用以对其进行测试。 如我所见,此默认xml有2个可能的位置: 两种解决方案都需要特殊的pom动作: 在解决方案1中,我在构建过程中将自动副本复制到目标文件夹

  • 我有一个使用Gradle作为构建工具的项目和第二个使用Maven的POM的子项目。我没有在子项目上更改构建工具的自由。 我想要实现的是将我的项目添加到Maven POM中,作为我的Gradle项目的依赖项。 其中root(当前目录)是我的Gradle项目,并包含,Maven项目位于下,POM文件就在该目录下。 我在我的< code>build.gradle文件中尝试了这些变化: 第一次尝试: 第二