EDIT#2:这个问题再次出现在我身上。如果您想弄清楚如何修改某些包并将其添加到 maven,请继续阅读,但是如果您只是想弄清楚如何摆脱该错误(以及其他类似的错误,例如涉及不同的properties) 那么你应该遵循这个答案中的建议:https://stackoverflow.com/a/34133450/754988. 它比我的要好得多。
虽然 attacomsian 的解决方案可能适用于某些人,但我依赖抽象的 UserProfile 来提供其他服务(例如 Google 登录),而他们的解决方案可能会破坏我。
我发现一个侵入性较小的操作是前往 ss-facebook's github 并按照他们的说明的前两行从源代码构建:
git clone git://github.com/SpringSource/spring-social-facebook.git
cd spring-social-facebook
但在运行./gradlew build 命令之前,请打开此文件进行编辑:
./spring-social-facebook/src/main/java/org/springframework/social/facebook/api/UserOperations.java
向下滚动到底部并从数组中删除“上下文”,更改
static final String[] PROFILE_FIELDS = {
"id", "about", "age_range", "birthday", "context", "cover", "currency", "devices", "education", "email",
....
"website", "work"
};
到
static final String[] PROFILE_FIELDS = {
"id", "about", "age_range", "birthday", "cover", "currency", "devices", "education", "email",
....
"website", "work"
};
现在回到源文件夹并运行最终命令:
./gradlew build
您将在那里获得一个 ./build 文件夹,其中包含一个 zip 文件,解压缩它以找到您的工作 jar!我使用 maven,并将我拥有的两个远程依赖项替换为一些本地依赖项,如下所示:
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-facebook</artifactId>
<version>3.0.0.M1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/spring-social-facebook-3.0.0.BUILD-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-facebook-web</artifactId>
<version>3.0.0.M1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/spring-social-facebook-web-3.0.0.BUILD-SNAPSHOT.jar</systemPath>
</dependency>
编辑:我知道这不是在 Maven 中包含这样的自定义 jar 的最佳方式。实际上把它放进去有点像兔子洞,它就像你的 pom 中的其他罐子一样工作。我最终通过运行这些命令来手动安装我制作的两个 jar 使其工作得更好(3.0.1337 是我为避免名称冲突而制作的版本 - 不确定是否有必要)...
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file -Dfile=web/src/main/resources/lib/spring-social-facebook-3.0.1337.BUILD-SNAPSHOT.jar -DgroupId=org.springframework.social -DartifactId=spring-social-facebook -Dversion=3.0.1337 -Dpackaging=jar -DlocalRepositoryPath=web/src/main/resources/local-repo -DgeneratePom=true
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file -Dfile=web/src/main/resources/lib/spring-social-facebook-web-3.0.1337.BUILD-SNAPSHOT.jar -DgroupId=org.springframework.social -DartifactId=spring-social-facebook-web -Dversion=3.0.1337 -Dpackaging=jar -DlocalRepositoryPath=web/src/main/resources/local-repo -DgeneratePom=true
...进入我在 pom 中声明的本地存储库,如下所示:
<repositories>
<repository>
<id>local-repo</id>
<url>file://${project.basedir}/src/main/resources/local-repo</url>
</repository>
</repositories>
然后我将 jars 添加到源代码管理中,并在我的 gitignore 中添加了一行以忽略 /src/main/resources/local-repo 文件夹。
如果有人有更好的方法来保留所有原始代码,只需从该文件末尾的数组中删除该“上下文”字符串,并希望避免所有这些垃圾,而是使用简单的单数班级更换或延期,请加入。我只是将所有内容都包括在内,因为它肯定会为我节省一天的时间,让我不得不一一解决这些事情。
免责声明:我不知道这可能会产生什么副作用,而且我对这个库也不熟悉。尽管我怀疑这是否会造成很大的伤害,并且显然是这一领域的改进,但如果不花更多时间在这个库上工作,我可能无法合理地预见到这种变化。因此,我不提供修改后的 JAR,只是为其他人写下一些简单的说明。继续这些说明,风险自负。
另外,我刚刚检查了许可证,如果您确实进行了此更改,请确保您按照说明进行操作:
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
如果我遗漏了任何其他法律内容,请发表评论让我知道。