如何将Maven指向Java源代码依赖项?

如何将Maven指向Java源代码依赖项?,java,maven,dependencies,dependency-management,Java,Maven,Dependencies,Dependency Management,我有一个ApacheArchiva Repo,我已经为我正在处理的Maven项目处理二进制依赖关系;但是,该项目似乎还依赖于本地第三方源代码(不确定发行许可证)。有没有一种方法可以让Maven在需要构建时从某个地方获取这个源代码?通常,源代码会存储在SCM中,但对于我只用于编译的java源文件(仅在编译时需要),但不希望在主“/src”目录中使用的java源文件,这似乎不是正确的解决方案。详细说明和最佳实践值得赞赏,我对Java开发和Maven非常陌生。您可以构建第三方源代码的Jar文件,并将其

我有一个ApacheArchiva Repo,我已经为我正在处理的Maven项目处理二进制依赖关系;但是,该项目似乎还依赖于本地第三方源代码(不确定发行许可证)。有没有一种方法可以让Maven在需要构建时从某个地方获取这个源代码?通常,源代码会存储在SCM中,但对于我只用于编译的java源文件(仅在编译时需要),但不希望在主“/src”目录中使用的java源文件,这似乎不是正确的解决方案。详细说明和最佳实践值得赞赏,我对Java开发和Maven非常陌生。

您可以构建第三方源代码的Jar文件,并将其放在/lib文件夹下,并在pom.xml文件中提供依赖关系,现在当您构建代码时,依赖关系将从特定的Jar文件中获取

  <dependency>
         <groupId>--grp id name--</groupId>
         <artifactId>--artifact id--</artifactId>
         <scope>system</scope>
         <version>1.0</version>
         <systemPath>--${basedir}\lib\{name}.jar--</systemPath> (Path of jar)
      </dependency>
   </dependencies>

--grp id名称--
--工件id--
系统
1
--${basedir}\lib\{name}.jar--(jar的路径)
*在实施时删除“---”。

可能的解决方案:

  • 说服第三方项目将带有类文件的JAR部署到Maven Central(如果是开源的)
  • 说服第三方项目将带有类文件的JAR部署到Apache Archiva Repo(如果是封闭源代码且在同一组织中)
  • 说服第三方项目将带有类文件的JAR部署到他们自己的Maven存储库管理器中,并在ApacheArchiva实例中注册该repo(如果是封闭源代码,而不是在同一个组织中;不确定ApacheArchiva是否提供此类功能)
  • 自己用类文件构建JAR,并将其部署到ApacheArchiva repo。然后像往常一样声明对它的依赖关系
您可以使用,例如:


...
org.codehaus.mojo
构建助手maven插件
1.7
添加源
生成源
添加源
显示第三方源代码的路径
...

您是否只需要在编译时使用该源代码?@Puce是的,这是正确的。因此,为了澄清:依赖项始终必须打包?(比如进入一个.jar)@BrandonSnider是的,至少有现成的特性(jar、pom、ear、war等等)。不过,我不确定定制组件支持什么。
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>path to where your 3rd party source code is present</source>
                ...
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>