簡體   English   中英

Maven編譯源jar依賴項

[英]Maven compile a source jar dependency

假設我有一個使用可在Maven存儲庫中找到的依賴項的項目。 但是,還可以說,將要下載的jar文件不是適合我的項目的格式(例如,如果我的maven項目是一個Android項目,並且jar已經以dex工具不喜歡的方式編譯) 。 我想要做的是下載該依賴項的源版本。 但是,一旦我添加了java-source,就不再能從我自己的源代碼訪問這些類了。 我希望maven下載源jar並編譯其中的java文件,並將編譯后的類文件放在classpath中。 那可能嗎?

我唯一的選擇是自己創建一個包含該庫的新項目,但這很麻煩。

您可以執行以下操作:

  1. 使用maven依賴插件解包目標並將依賴項的內容放入文件夾中
  2. 使用build-helper-maven-pluginadd-source目標將此文件夾添加為源文件夾

這是一些代碼片段......

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.2</version>
  <executions>
    <execution>
      <id>unpack</id>
      <phase>process-sources</phase>
      <goals>
        <goal>unpack</goal>
      </goals>
      <configuration>
        <artifactItems>
          <artifactItem>
            <groupId>my.group</groupId>
            <artifactId>my.artifact</artifactId>
            <version>my.artifact.version</version>
            <classifier>sources</classifier>
            <overWrite>false</overWrite>
            <outputDirectory>${project.build.directory}/my.artifact</outputDirectory>
          </artifactItem>
        </artifactItems>
      </configuration>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.5</version>
  <executions>
    <execution>
      <id>add-source</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>add-source</goal>
      </goals>
      <configuration>
        <sources>
          <source>${project.build.directory}/my.artifact.source</source>
        </sources>
      </configuration>
    </execution>
  </executions>
</plugin>

使用Maven下載源包很容易:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
    <classifier>sources</classifier>
</dependency>

如何配置Maven來擴展這種依賴關系,然后編譯它的內容超出了我的范圍....

你考慮過ANT解決方案嗎? ivy插件為它提供了類似Maven的功能,並且groovy插件可用於編寫特殊構建邏輯的腳本:

build.xml文件

Ivy使用“配置”(類似於Maven范圍)來分組依賴關系。

在此示例中,“sources”配置保存下載的源包。 它們被放入引用的文件集中,可以由groovy任務按順序處理。

每個下載的源jar都解壓縮到“build / src”目錄中:

<project name="demo" default="unzip-sources" xmlns:ivy="antlib:org.apache.ivy.ant">

    <property name="build.dir" location="build"/>
    <property name="src.dir"   location="${build.dir}/src"/>

    <target name="resolve">
        <ivy:resolve/>
        <ivy:cachepath pathid="build.path" conf="build"/>
        <ivy:cachefileset setid="sourcezips" conf="sources"/>
    </target>

    <target name="unzip-sources" depends="resolve">
        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

        <groovy>
        project.references.sourcezips.each {
            ant.unzip(src: it, dest: properties["src.dir"])
        }
        </groovy>
    </target>

    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

</project>

的ivy.xml

每個源包依賴項都使用“sources”配置。 這直接映射到Maven模塊的“源”范圍。

<ivy-module version="2.0">
    <info organisation="org.myspotontheweb" module="demo"/>
    <configurations>
        <conf name="build" description="ANT tasks"/>
        <conf name="sources" description="Source packages"/>
    </configurations>
    <dependencies>
        <!-- Build dependencies -->
        <dependency org="org.codehaus.groovy" name="groovy-all" rev="1.8.2" conf="build->default"/>

        <!-- Source dependencies -->
        <dependency org="log4j" name="log4j" rev="1.2.16" conf="sources"/>
        <dependency org="commons-lang" name="commons-lang" rev="2.6" conf="sources"/>
    </dependencies>
</ivy-module>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM