2

私の製品には複数のJavaプロジェクト(jarにパッケージ化されている)があり、pomそれらをモジュールとして組み合わせたものが1つあります。プロジェクトごとに異なる依存関係があり、それらを組み合わせた依存関係は親で定義されpomます。プロダクション用の出力を準備し、次のことを行います。

  1. すべてのjarファイルを1つの場所にデプロイ(コピー)します
  2. サードパーティのjarファイルをすべてのプロジェクトから別の単一のフォルダにコピーします
  3. 構成ファイル(src / main / resourcesの下にあります)をすべてのプロジェクトから3番目のフォルダーにコピーします。

すべてのプロジェクトについて上記のそれぞれを手動でコピーする必要なしにそれを行う方法を知っている人はいますか?また、将来のプロジェクトで、あまりにもハードで具体的な作業をしなくても、この展開手順をサポートできるようにしたいと考えています。

4

3 に答える 3

2

これにはMavenアセンブリプラグインを使用する必要があります-これは配布を圧縮する例です(本番環境では解凍する必要があります):

  <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptors>
                            <descriptor>${project.basedir}/src/main/assembly/assembly.xml</descriptor>
                        </descriptors>
                    </configuration>
                </execution>
            </executions>
        </plugin>

およびアセンブリ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>${env}</id>
<formats>
    <format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>

<dependencySets>
    <dependencySet>
        <useProjectArtifact>false</useProjectArtifact>
        <includes>
            <include>com.mycompany:ear-project</include>
            <include>com.mycompany:jnlp-project</include>
        </includes>
        <outputDirectory>libs</outputDirectory>
    </dependencySet>
</dependencySets>

<fileSets>
    <fileSet>
        <directory>src/main/resources</directory>
        <outputDirectory>/</outputDirectory>
    </fileSet>
    <fileSet>
        <directory>target/docbook/pdf</directory>
        <includes>
            <include>index.pdf</include>
        </includes>
        <outputDirectory>/</outputDirectory>
    </fileSet>
</fileSets>

2つのプロジェクト(EAR、JNLP)の場合、 outputDirectory構成を介して依存関係を設定できることに注意してください。

于 2012-08-01T07:09:58.327 に答える
0

私のプロジェクトにも同じ要件があります。

ClearCaseとSVNでJenkinsを使用することには違いがあります。SVNを使用している場合は、プロジェクトをメインプロジェクトにチェックアウトし、同じディレクトリにあるように作業する必要があります。

子プロジェクトをチェックアウトした後、それらに取り組むことができます。この例では、コアとスケジューラーが子プロジェクトであるassembly.xmlの一部を見ることができます。

</fileSet>
 <fileSet>
  <directory>./core/src/main/resources/</directory>
  <outputDirectory>./examples</outputDirectory>
  <includes>
    <include>*</include>
  </includes>
</fileSet>
<fileSet>
  <directory>./scheduler/src/main/resources/</directory>
  <outputDirectory>./examples</outputDirectory>
  <includes>
    <include>*</include>
  </includes>
</fileSet>

これにより、基本的にリソースフォルダのコンテンツがメインプロジェクトのサンプルプロジェクトにコピーされます。

ここでも同じことができます。すべてのプロジェクトが同じVOB上にあり、使用可能な場合は、すべてのリソースをコピーする相対的な場所を指定する必要があります。例えば:

</fileSet>
 <fileSet>
  <directory>../../../your_sub_project1/src/main/resources/</directory>
  <outputDirectory>./examples</outputDirectory>
  <includes>
    <include>*</include>
  </includes>
</fileSet>
<fileSet>
  <directory>../../../your_sub_project2/src/main/resources/</directory>
  <outputDirectory>./examples</outputDirectory>
  <includes>
    <include>*</include>
  </includes>
</fileSet>

このようにして、プライマリpomを実行するときに、サブプロジェクトのコンテンツにアクセスし、リソースを特定のフォルダーにコピーすることができます。それが役に立てば幸い..

于 2012-08-02T12:19:48.107 に答える
0

Andrey Borisovの回答に加えて、(私のすべての問題に回答するために)アセンブリXMLで行ったことを要約します。

  1. すべてのjarファイルを1つの場所にデプロイ(コピー)します[「moduleset」要素を使用]
  2. すべてのプロジェクトから別のプロジェクトにサードパーティのjarファイルをコピーします["dependencySets"要素を使用]
  3. 構成ファイル(src / main / resourcesの下にあります)をすべてのプロジェクトから3番目のフォルダーにコピーします。[「fileset」要素を使用]

    http://maven.apache.org/xsd/assembly-1.1.2.xsd"> bin dir false

    <moduleSets>
        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>
            <binaries>
                <outputDirectory>modules</outputDirectory>
                <unpack>false</unpack>
            </binaries>
        </moduleSet>
    </moduleSets>
    
    
    <dependencySets>
        <dependencySet>
            <useProjectArtifact>false</useProjectArtifact>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>
    
    <fileSets>
        <fileSet>
            <directory>my DIR 1</directory>
            <excludes>
                <exclude>*log4j*</exclude>
            </excludes>
            <outputDirectory>resources</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>my DIR 2</directory>
            <outputDirectory>resources</outputDirectory>
        </fileSet>
    </fileSets>
    

于 2012-08-08T08:05:03.780 に答える