旧项目正在转移到 maven,但我找不到tuprolog的库。
我从一个老项目里拿了一个库,不清楚是怎么创建的(不得不说,里面找到了eclipse,ide目录,总体来说,结构很奇怪,不像平时那样,好像这个项目已经大大被某人更改)。
我试图用maven连接一个类似的库
<dependency>
<groupId>it.unibo.alice.tuprolog</groupId>
<artifactId>tuprolog</artifactId>
<version>3.3.0</version>
</dependency>
但它没有几个必要的类......
import alice.tuprolog.NullTerm;
import alice.tuprolog.SpyEvent;
import alice.tuprolog.SpyListener;
我不得不做这样的事情
<dependency>
<artifactId>alice.tuprolog</artifactId>
<groupId>tuprolog</groupId>
<scope>system</scope>
<version>2P_1.0.0</version>
<systemPath>${basedir}/lib/2P_1.0.0.jar</systemPath>
</dependency>
编译时出现严重警告
在构建 com.its:common:jar:1.0-SNAPSHOT 的有效模型时遇到了一些问题 tuprolog:alice.tuprolog:jar 的“dependencies.dependency.systemPath”不应指向项目目录中的文件,${basedir} /lib/2P_1.0.0.jar 将无法被依赖项目解决@第 62 行第 25 列强烈建议修复这些问题,因为它们会威胁到构建的稳定性。出于这个原因,未来的 Maven 版本可能不再支持构建这种格式错误的项目。
更新
我创建了 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tuprolog</groupId>
<artifactId>alice.tuprolog</artifactId>
<version>2P_1.0.0</version>
<name>prolog</name>
<packaging>jar</packaging>
<build>
</build>
</project>
然后运行命令
mvn install:install-file -DpomFile=E:\!_svn\dec\common\lib\prolog\pom.xml –Dfile E:\!_svn\dec\common\lib\prolog\2P_1.0.0.jar r -DgroupId=tuprolog -DartifactId=alice.tuprolog -Dversion=2P_1.0.0 -Dpackaging=jar -DgeneratePom=true
出错了
在当前项目和插件组 [org.apache.maven.plugins, org.codehaus.mojo] 中找不到前缀“E”的插件,可从存储库 [local (e:!_Insta ll!_apache-mvn-local -repo), 中央 ( https://repo1.maven.org/maven2/)] -> [帮助 1]
此命令同样的错误
mvn install:install-file –Dfile=2P_1.0.0.jar -DgroupId=tuprolog -DartifactId=alice.tuprolog -Dversion=2P_1.0.0
[错误] 无法在项目 alice.tuprolog 上执行目标 org.apache.maven.plugins:maven-install-plugin:2.4:install-file (default-cli):目标 org.apache.maven 的参数“文件”。plugins:maven-install-plugin:2.4:install-file is missing or invalid -> [Help 1] [ERROR]
添加引号
mvn install:install-file -DpomFile="E:\!_svn\declarant\common\lib\prolog\pom.xml" –Dfile="E:\!_svn\declarant\common\lib\prolog\2P_1.0.0.jar" r -DgroupId=tuprolog -DartifactId=alice.tuprolog -Dversion=2P_1.0.0 -Dpackaging=jar -DgeneratePom=true
在当前项目和插件组 [org.apache.maven.plugins, org.codehaus.mojo] 中没有找到前缀 '?Dfile=E' 的插件,可从存储库 [local (e:\ !_Install!_apache- mvn-local-repo), 中央 ( https://repo1.maven.org/maven2/)] -> [帮助 1] [错误]
然后原来是错误在错误的字符中,所以这段代码执行没有错误
mvn install:install-file -DpomFile="E:/!_svn/declarant/common/lib/prolog/pom.xml" -Dfile="E:/!_svn/declarant/common/lib/prolog/2P_1.0.0.jar" -Dgro
upId=tuprolog -DartifactId=alice.tuprolog -Dversion=2P_1.0.0 -Dpackaging=jar -DgeneratePom=true
[INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ alice.tuprolog --- [INFO] 安装 E:!_svn\dec\common\lib\prolog\2P_1.0.0。 jar 到 e:!_Install!_apache-mvn-local-repo\tuprolog\alice.tuprolog\2P_1.0.0\alice.tuprolog-2P_1.0.0.jar [INFO] 安装 E:!_svn\dec\common\lib\prolog \pom.xml 到 e:!_Install!_apache-mvn-local-repo\tuprolog\alice.tuprolog\2P_1.0.0\alice.tuprolog-2P_1.0.0.pom [INFO] ---------- -------------------------------------------------- ------------ [信息] 构建成功
但其实在指定位置有这个文件,只是项目中没有看到
Maven配置文件说
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>e:\!_Install\!_apache-mvn-local-repo\</localRepository>
事实上,这个多模块项目的所有主要工件都位于其他地方。
并且 prolog**.jar 被复制到maven配置文件中指定的位置
我正在使用Intellij IDEA 2019
请告诉我如何解决它..
决定
在maven配置文件中指定与 Intellij idea中相同的本地存储库路径。
此外,我决定在 maven 项目中创建一个存储库。
在需要工件的模块中,在 pom.xml 文件中,指定以下内容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>dec</artifactId>
<groupId>com.dec</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.its</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
<name>common</name>
<packaging>jar</packaging>
<properties>
</properties>
<repositories>
<repository>
<id>repository</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${basedir}/lib/repository</url>
</repository>
</repositories>
/lib/repository - 此目录位于模块的根目录中。
然后命令(上面给出)再次在那里收集工件),只在命令中添加了一个参数
-DlocalRepositoryPath="E:/!_svn/dec/common/lib/repository"
systemPath有点像用于系统依赖项。那些。在运行项目的机器上必须有一个可用的路径。您在源代码中有路径,这对 Maven 来说似乎很奇怪。“左”库的问题很常见。甚至问题是:如果库不在 maven 存储库中怎么办?
通常人们将依赖项安装到机器上的本地存储库中:
之后,它可以在没有的情况下连接
systemPath:缺点:任何构建项目的人都需要先安装库。
更明智的选择:部署您自己的存储库(例如 Nexus)并将所有此类库存储在其中。然后公司中的所有人员都可以通过链接到存储库来构建项目。
其他选项对我来说似乎更可疑。可以反编译库并将其作为子项目包含在 maven 中。还有一个选项可以在项目中声明存储库(Maven 通过 systemPath/system 添加 jar,但未添加到 war 或其他任何地方),但您需要将 JAR 与源代码一起分发。