具有依賴關系的Maven 2程序集:不包括范圍“系統”下的jar我正在使用maven-assembly插件來創建我的應用程序的jar,包括它的依賴項,如下所示:<assembly>
<id>macosx</id>
<formats>
<format>tar.gz</format>
<format>dir</format>
</formats>
<dependencySets>
<dependencySet>
<includes>
<include>*:jar</include>
</includes>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets></assembly>(我省略了一些與問題無關的其他內容)到目前為止,這工作得很好,因為它創建了一個lib包含所有依賴項的目錄。但是,我最近添加了一個新的依賴項,其范圍是system,并且它不會將其復制到lib輸出目錄。我必須遺漏一些基本的東西,所以我打電話求助。我剛剛添加的依賴項是:<dependency>
<groupId>sourceforge.jchart2d</groupId>
<artifactId>jchart2d</artifactId>
<version>3.1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/external/jchart2d-3.1.0.jar</systemPath></dependency>我能夠包含此依賴項的唯一方法是將以下內容添加到assembly元素:<files>
<file>
<source>external/jchart2d-3.1.0.jar</source>
<outputDirectory>lib</outputDirectory>
</file></files>但是,這會強制我在重命名此jar時更改pom和程序集文件(如果有的話)。而且,這似乎是錯的。我有試過<scope>runtime</scope>在dependencySets和<include>sourceforge.jchart2d:jchart2d</include>沒有運氣。那么如何system在maven 2中將scoped jar 包含到匯編文件中?非常感謝
3 回答

慕碼人2483693
TA貢獻1860條經驗 獲得超9個贊
我沒有意外添加系統范圍依賴關系(畢竟,必須根據定義明確提供系統范圍的依賴關系)。實際上,如果您真的不想將該依賴項放在本地存儲庫中(例如,因為您希望將其作為項目的一部分進行分發),那么我會這樣做:
我會將依賴項放在項目本地的“文件系統存儲庫”中。
我會在我
pom.xml
這樣聲明存儲庫:<repositories> <repository> <id>my</id> <url>file://${basedir}/my-repo</url> </repository></repositories>
我只是聲明沒有
system
范圍的工件,這只是麻煩的來源:<dependency> <groupId>sourceforge.jchart2d</groupId> <artifactId>jchart2d</artifactId> <version>3.1.0</version></dependency>
我不是100%確定這將滿足您的需求,但我認為這是一個比使用系統范圍更好的解決方案。
更新:我應該在原來的答案中提到我現在正在解決它。要在基于文件的存儲庫中安裝第三方庫,請使用install:install-file
以下localRepositoryPath
參數:
mvn install:install-file -Dfile=<path-to-file> \ -DgroupId=<myGroup> \ -DartifactId=<myArtifactId> \ -Dversion=<myVersion> \ -Dpackaging=<myPackaging> \ -DlocalRepositoryPath=<path-to-my-repo>
您可以將其粘貼到* nix shell中。在Windows上,刪除“ \
”并將所有內容放在一行上。

千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
順便說一句,你可以自動化它,并使其成為你的maven構建的一部分。以下內容將在編譯之前將jar安裝到本地存儲庫中:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <executions> <execution> <id>hack-binary</id> <phase>validate</phase> <configuration> <file>${basedir}/lib/your-lib.jar</file> <repositoryLayout>default</repositoryLayout> <groupId>your-group</groupId> <artifactId>your-artifact</artifactId> <version>0.1</version> <packaging>jar</packaging> <generatePom>true</generatePom> </configuration> <goals> <goal>install-file</goal> </goals> </execution> </executions> </plugin>

30秒到達戰場
TA貢獻1828條經驗 獲得超6個贊
如果你創建jar,我會找到簡單的解決方案
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <webResources> <resource> <directory>dependencies/mydep</directory> <targetPath>WEB-INF/lib</targetPath> <filtering>true</filtering> <includes> <include>**/*.jar</include> </includes> </resource> </webResources></configuration></plugin>
添加回答
舉報
0/150
提交
取消