【问题标题】:Source and Javadoc jar generation源代码和 Javadoc jar 生成
【发布时间】:2023-03-20 03:06:01
【问题描述】:

我认为我的问题很简单。然而,令人惊讶的是,我找不到任何简单的解决方案。

我正在 Netbeans 上开发一个开源 Java 库项目,并且像许多其他人一样,我想将它作为 binary.jar、source.jar 和 javadoc.jar 发布。

有没有办法在 Netbeans 上自动生成它们?我知道maven可以做到。但是学习曲线似乎太长了。

有一个类似的问题,但唯一的答案没有用:Automatically generating source and doc jars in Netbeans

【问题讨论】:

  • a) 我认为 maven 解决方案的学习曲线比手动解决方案低很多 b) 请定义“不起作用”

标签: java build jar


【解决方案1】:

试试蚂蚁http://ant.apache.org/。它比 maven 更容易学习,并且可以进行代码编译。

【讨论】:

  • 根据我的经验,情况正好相反。我们使用 ant 构建脚本来构建我们的应用程序,其中包含源代码和几个 jar 文件。后来我们切换到 maven,我的印象是它的自动库获取功能更强大。但我对两者的经验都很有限。
  • @seanizer:有不同种类的困难。 Ant 更易于使用和逐步学习,因为您不必围绕它组织项目。
  • @Michael 这正是让 ant 变得困难的原因。使用 maven,您必须进行一次转换,然后您就可以启动并运行,使用 ant,您必须不断调整并不断想知道为什么事情不像您期望的那样工作。使用 maven,所有插件都以自然的方式协同工作,因为每个人都在使用一个定义良好的模型。
  • @kasten maven 的两个关键特性是 a) 自动依赖管理和 b) 约定优于配置(例如,您可以通过查询适当的属性来依赖事物在它们应该在的位置这一事实)。 ant 的关键特性是你几乎可以做任何事情,但这也是我认为的主要错误。
  • @seanizer:据我所知,有些人对 maven 的行为表现得非常糟糕,除了“自然”之外,我敢肯定,使用大型复杂的 maven 配置比大型复杂的 ant 脚本,如果你只想做 X,ant 让你做到这一点,而不需要你的右臂,你的长子和你不朽的灵魂。
【解决方案2】:

Maven 插件可能是你的答案

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.7</version>
    <executions>
        <execution>
            <goals>
                <goal>jar</goal>
            </goals>
            <phase>package</phase>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.0.4</version>
    <executions>
        <execution>
            <goals>
                <goal>jar</goal>
            </goals>
            <phase>package</phase>
        </execution>
    </executions>
</plugin>

【讨论】:

  • 请仔细阅读您的问题。但是,对于一个简单的项目,Maven 并不代表太大的学习曲线,恕我直言。
【解决方案3】:

使用ant,您可以轻松生成 javadoc、编译、创建 jar 和 zip 文件。 这比在 netbeans 中做要好,因为如果有人想贡献,他可以用他喜欢的 IDE 做。

【讨论】:

    【解决方案4】:

    如果您正在开发一个其他人可能会帮助开发的库,那么您应该考虑使用Maven

    这样您的项目将独立于您的 IDE,并且依赖项、测试和部署将集中处理,而不是贡献者自己滚动。m

    【讨论】:

      【解决方案5】:

      这是您需要将源代码和 javadoc 自动附加到构建的所有 maven 配置:

      <build>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-javadoc-plugin</artifactId>
                  <version>2.7</version>
                  <executions>
                      <execution>
                          <id>attach-javadoc</id>
                          <goals>
                              <goal>jar</goal>
                          </goals>
                      </execution>
                  </executions>
              </plugin>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-source-plugin</artifactId>
                  <version>2.1.2</version>
                  <executions>
                      <execution>
                          <id>attach-source</id>
                          <goals>
                              <goal>jar</goal>
                          </goals>
                      </execution>
                  </executions>
              </plugin>
          </plugins>
      </build>
      

      这还不算太糟糕吧?

      【讨论】:

      • 是吗?我只批评 ant,因为它的代码和调试都很糟糕。说真的:你可以从这段代码中去掉 groupIds、执行 ID 和插件版本,它会更短,但我更喜欢把事情拼出来。
      【解决方案6】:

      这是我最后提出的解决方案。它使用 Ant 并生成 javadoc 和源 jar。然后它将二进制 jar、javadoc、source.jar、许可证和自述文件归档到一个准备发布的 zip 文件中。

       <target name="-pre-init">
          <property file="version.properties"/>
          <property name="dist.jar" value="dist/${ant.project.name}-${project.version}.jar"/>
      </target>
      
      <target description="bundle sources in a jar" name="package-sources">
          <jar basedir="src" destfile="build/release/${ant.project.name}-${project.version}-sources.jar"/>
      </target>
      
      
      <target name="package_for_release" depends="jar,javadoc, package-sources">
          <mkdir dir="build/release"/>
          <copy file="${dist.jar}" todir="build/release/"/>
          <copy file="licence.txt" todir="build/release/"/>
          <copy file="beni_oku.txt" todir="build/release/"/>
          <mkdir dir="build/release/doc"/>
          <copy todir="build/release/doc">
              <fileset dir="dist/javadoc" includes="**"/>
          </copy>
      
          <zip basedir="build/release/" includes="**" destfile="dist/${ant.project.name}-${project.version}.zip"/>
      </target>
      

      在 NetBeans 中打开 build.xml 而不是右键单击 -> 运行目标 -> [其他目标] -> package_for_release

      脚本从属性文件中获取版本号。我从here 得到了这个解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-07
        • 2017-11-14
        • 2013-06-20
        • 1970-01-01
        • 2010-09-27
        • 2011-10-15
        • 1970-01-01
        • 2022-01-07
        相关资源
        最近更新 更多