【问题标题】:What can I have as a Maven artifact and how can I use it?作为 Maven 工件,我可以拥有什么以及如何使用它?
【发布时间】:2014-08-04 06:28:10
【问题描述】:

我知道这似乎是一个已经被问到的问题,但我还没有找到对我有很大帮助的答案。

我多次阅读到最好为每个项目生成一个工件。但我的问题是:作为 Maven 工件,我可以拥有什么?

例如:我有一个具有自定义生命周期的自定义包装“MyPack”,我可以将整个目录“Mydirectory”作为工件吗?

假设目录的结构是这样的:

我的目录
-----|--罐子
-----|-----|--- client.jar
-----|-----|--- server.jar
-----|--jsps
-----|-----|--- page1.jsp
-----|-----|--- page2.jsp
--|--imgs
-----|-----|--- img1.png
-----|-----|--- img2.png

然后,我想创建一个新项目,其中包含“MyPack”包装和类型为“MyPack”的依赖项。在这个项目中,我的 Java 类需要 Maven 存储库中的 client.jar 和 server.jar 来编译,我想从新项目的存储库中复制所有 jsps 和 imgs。

我可以使用自定义 Maven 插件完成所有这些吗?

【问题讨论】:

    标签: java maven build


    【解决方案1】:

    您可以将任何您选择的工件作为 maven 工件。 使用maven assembly plugin 生成工件:

        <build>
           <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <descriptors>
                        <descriptor>${basedir}/src/main/assembly/shared.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
         ....
          </plugins> 
         ....
      </build>      
    

    在 shared.xml 文件中,您指定要包含在工件中的格式和文件:

    <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>shared</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <outputDirectory>/</outputDirectory>                            
            <directory>${basedir}/.....</directory>
            <includes>
                <include> ... </include>
            </includes>
            <fileMode>0644</fileMode>
            <filtered>false</filtered>
            <lineEnding>unix</lineEnding>
        </fileSet>
      </fileSets>
    </assembly>
    

    当您进行“maven deploy”时,“共享”工件将与项目的主要工件一起打包和部署。 为了在另一个项目中使用该工件,请使用目标为“unpack-dependencies”的maven-dependency-plugin

    【讨论】:

    • 感谢您的回答@esalagea。使用“unpack-dependencies”目标后,我应该使用具有“System”范围的依赖项将 jar client.jar 和 server.jar 添加到我的新项目的类路径中,还是有其他解决方案?
    猜你喜欢
    • 2022-11-11
    • 2010-12-10
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2011-10-27
    相关资源
    最近更新 更多